2016-04-02 9 views
0

Ich möchte Solr 4 Synonyme für eine gegebene Synonymliste in zwei Wegen zurückgeben.Synonyme in Solr Zwei-Wege

indizierte Inhalte

Nice villa front of the sea 
Looking for condo around 2 billions $ 
Superb house with 3 bedrooms 
Flat for sale 

synonyms.txt

#Equivalent synonyms may be separated with commas and give 
#no explicit mapping. In this case the mapping behavior will 
#be taken from the expand parameter in the schema. This allows 
#the same synonym file to be used in different synonym handling strategies. 

villa, house, home, condo, appartement, residence, flat 

schema.xml

<analyzer type="index"> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="false"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
</analyzer> 

<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
</analyzer> 

Eigentlich:

Suche "Villa" gibt alle Ergebnisse zurück, aber wenn ich nach einem anderen Wort in Synonyms.txt suche, bekomme ich nichts anderes als den entsprechenden Satz.

dh flache Rückgabe:

Flat for sale 

dh Haus zurückkehrt:

Superb house with 3 bedrooms 

Ich möchte alle Synonyme gefällt! (Wohnung, Haus, Wohnung, etc.) zurückzukehren gleiche wie "Villa" Schlüsselwort.

+0

Das Synonym Filter nach dem tokenizer sein sollte - versuchen, es zu bewegen und sehen, ob das hilft (da Sie keinen Strom, der aus separaten Token hat, bevor tokenization hat passiert). – MatsLindh

Antwort

0

Es gibt eine Reihe von Problemen mit der Konfiguration des Analysators.

  • "Das Synonym Filter sollte nach der tokenizer sein", wie MatsLindh aus
  • wies
  • LowerCaseFilter vor dem SynonymFilter kommen sollte. Ansonsten würde Flat in Ihrem Beispiel ignoriert, da es nicht alles in Kleinbuchstaben ist.
  • Die PhoneticFilter sollte inject auf true festgelegt haben, da Sie jetzt nur das phonetische Token anstelle des ursprünglichen stempeln.

Versuchen mit dieser config:

<analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" 
      synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
    <filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
</analyzer> 
+0

Eigentlich würde SynonymFilter wahrscheinlich immer noch mit nicht-Kleinbuchstaben arbeiten, da Sie ignoreCase = "true" haben, aber immer noch besser, es nach dem Kleinbuchstabenfilter zu platzieren. – spyk

+0

Ok und was soll ich in meinen Query Analyzer legen? Tatsächlich habe ich: kollo

+0

Ich würde mit der genauen Abfragekonfiguration als Indexzeit beginnen. Sie können einen Fall machen, um SynonymFilter vollständig von der Abfrage zu entfernen, wenn mehrere Wörter Synonyme sind, aber ich würde es für jetzt gleich lassen. – spyk