質問
SolRに基本的な同義語を設定しようとしています。私が取り組んできたものは次のとおりです。
米国、米国、米国
私の理解では、それを同義語ファイルに追加すると、ユーザーが当社を検索し、米国または米国を含むドキュメントを取り戻すことができます。ユーザーが米国または米国に入れる場合の場合。
残念ながら、これを適切に配置すると、検索を行うと、3つの単語すべてを含むアイテムの結果が得られます。
デバッグをオンにすると、これは確かに私が見ているものです(そして、いくつかの茎):
(+DisjunctionMaxQuery(((westCite:us westCite:usa westCite:unit) | (text:us text:usa text:unit) | (docketNumber:us docketNumber:usa docketNumber:unit) | ((status:us status:usa status:unit)^1.25) | (court:us court:usa court:unit) | (lexisCite:us lexisCite:usa lexisCite:unit) | ((caseNumber:us caseNumber:usa caseNumber:unit)^1.25) | ((caseName:us caseName:usa caseName:unit)^1.5))))/no_coord
私はこれを引き起こすために何か間違ったことをしていますか?私のdefaultOperatorは、そしてそれを理解するために同義語フィルターに設定されています。
解決
クエリ中ではなく、インデックス作成中にのみSynonymFilterFactoryを使用してみてください。
ドキュメントもこれを提案しています。http://wiki.apache.org/solr/analyzerstokenizerstokenfilters#solr.synonymfilterfactory
他のヒント
同義語の検索をよりよく理解するために、以下で実装のステップバイステッププロセスに従ってください(私は使用しています solr 6.5。*バージョン):
ステップ1:
ダウンロード Country-synonyms.txt テキストファイルとそれを下のパスに配置します:
道: : solr-6.5.1 server solr yourcore conf
あなたのコア: それに応じてコアの名前を変更する必要があります
ステップ2:
フィールドタイプを追加します 管理系 上記の同じパスにファイル:
<fieldType name="country" class="solr.TextField" positionIncrementGap="100" sortMissingLast="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.SynonymFilterFactory" expand="false" ignoreCase="true" synonyms="country-synonyms.txt" tokenizerFactory="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer></fieldType>
ステップ3:タイプでフィールド(国籍)を追加します 国 同じファイル(マネージドシーマ)。
<field name="Nationality" type="country" indexed="true" stored="true"/>
ステップ4:solrを再起動します。
solr restart -p <your solr port>
ステップ5:
次に、フィールドを含むデータをインポートします 国籍.***
ステップ6:
以下のケースとテストでクエリします。
クエリ:
- 国籍:私たち
- 国籍:アメリカ
- 国籍:米国
- 国籍:アメリカ合衆国
上記のクエリはすべて同じ結果をもたらします。
ノート:*** SOLR再起動を含む上記の手順を実行した後にのみデータをインポートします。既存のデータでは機能しない場合があります(詳細については、以下を参照してください。 Analyzerstokenizerstokenfilters)