2016-04-02 5 views
0

指定された同義語リストに対して、Solr 4が2つの方法で同義語を返すようにします。Solrの同義語2通り

インデックス付きコンテンツ

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> 

検索「villa」はすべての結果を返しますが、Synonyms.txt内の他の単語を検索した場合は、それ以外の文は表示されません。

すなわち平らなリターン:

Flat for sale 

すなわち家のリターン:

Superb house with 3 bedrooms 

私はすべての類義語(フラット、住宅、マンション、など)は、 "別荘" のキーワードと同じ返したいと思います。

+0

同義語フィルタはトークナイザた後でなければなりません - それを移動してみてください、それが助けかどうかを確認(トークン化が持っている前に、別のトークンからなるストリームを持っていないので、起こりました)。 – MatsLindh

答えて

0

アナライザの設定にはいくつかの問題があります。

  • MatsLindhが
  • LowerCaseFilterを指摘したようにSynonymFilterの前に来なければならない「と同義語フィルタは後トークナイザでなければなりません」。そうでない場合、あなたの例では、Flatはすべて小文字ではないので無視されます。
  • PhoneticFilterは、injecttrueに設定されている必要があります。元のトークンではなく表音トークンのみを取り除いているためです。

この設定を試してみてください:

<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

実際にSynonymFilterは、ignoreCase = "true"なので、まだ小文字では動作しませんが、LowercaseFilterの後に置く方が良いでしょう。 – spyk

+0

私はクエリアナライザに入れていいですか?実際に私は: kollo

+0

インデックス時刻として正確なクエリを設定することから始めます。 SynonymFilterを複数の同義語の場合でも完全に削除するケースを作ることができますが、今は同じままにしておきます。 – spyk