2010-04-13 12 views
18

Ich möchte meine Solr-Suchmaschine so konfigurieren, dass ich eine exakte Übereinstimmung für den eingegebenen Suchbegriff bekomme.Solr genaue Wortsuche

z. "Steuern" sollten Dokumente mit "Steuern" und nicht "Steuern", "Steuern" usw. zurückgeben.

Jede Hilfe oder Tipps wären willkommen.

Antwort

21

Ich nehme an, dass Ihr Feld ein TextField ist, standardmäßig sucht Solr eine unscharfe Suche in diesem Feld. Sie möchten Ihr Feld als Zeichenfeld einrichten und keinen Tokenizer hinzufügen, dann erhalten Sie eine exakte Übereinstimmung.

Sie können sogar die exakte Suche mit einer unscharfen Suche kombinieren und DisMax verwenden, um die relativen Gewichte zu erhöhen.

Beispiel (schema.xml):

<field name="name"    type="string" indexed="true" stored="false" required="true" /> 
<field name="nameString"  type="string" indexed="true" stored="false" required="true" /> 
<copyField source="name" dest="nameString"/> 

Beispiel (solrconfig.xml):

<requestHandler name="accounts" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="defType">dismax</str> 
     <str name="qf"> 
     nameString^10.0 name^5.0 description^1.0 
     </str> 
     <str name="tie">0.1</str> 
    </lst> 
    </requestHandler> 
+4

Ist dies zur Abfragezeit mit einem speziellen Operator möglich? Wie = Steuern – mlissner

+0

@mlissner, das obige XML ist einfach Standardparameter, die der Abfrage hinzugefügt werden. U könnte dies getan haben, indem Sie zu Ihrer Abfrage defType = dismax & qa = nameString^10.0 name^5.0 Beschreibung^1.0 usw. etc –

+0

@ItayMoav hinzufügen, ist das Ziel, die * Benutzer * in der Lage sein, die genaue Übereinstimmung Abfrage zu platzieren. – mlissner

4

stemming ausschalten.

+1

Dank Hank, vielleicht sollte ich meine Frage angemessener haben formuliert, Wie kann ich deaktivieren ergeben? :) – Ruth

+2

Verwendet Textgen Feldtyp und neu indiziert, hat den Trick – Ruth

+0

siehe http://lucene.472066.n3.nabble.com/Exact-match-on-a-field-with-stemming-tt2808086.html#a2809293 –

3

in Ihrem schema.xml stamm zu deaktivieren, können Sie Textfeld wie folgt definieren:

<types> 

    <!-- other fields definition --> 

    <fieldType name="text_no_stem" class="solr.TextField" omitNorms="false"> 
     <analyzer> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.StandardFilterFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <!-- other fields definition --> 

</types> 

<fields> 

    <!-- other fields definition --> 

    <dynamicField name="*_nostem" type="text_no_stem" indexed="true" stored="true"/> 

    <!-- other fields definition --> 

</fields> 

ich verwende sunspot solr mit Ruby on Rails zu integrieren. Mit diesem in der schema.xml definiere ich meine durchsuchbare Block wie folgt aus:

searchable do 
    text(:wants, as: :wants_nostem) 
end 
1

Verwenden solr String-Feld Whcih einen exakten Wert suchen zB

<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />