Solrでいくつかの基本的な同義語を設定しようとしています。私が取り組んできたのは:
私たち、アメリカ、アメリカ
私の理解では、これを同義語ファイルに追加すると、ユーザーは米国を検索し、米国または米国を含むドキュメントを取得できるようになります。ユーザーが米国または米国に置く場合も同様です。
残念ながら、これを設定すると、検索を実行すると、3つの単語すべてを含むアイテムの結果が得られます。ORではなく同義語のANDを実行しています。
デバッグをオンにすると、これは確かに私が見るものです(さらにいくつかのステミング):
(+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はANDに設定されていますが、シノニムフィルターがそれを理解することを期待しています。
SynonymFilterFactoryは、クエリ中ではなく、インデックス作成中にのみ使用してみてください。
ドキュメントはこれも示唆しています: http://wiki.Apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
同義語検索をよりよく理解するために、以下の実装のステップバイステップのプロセスに従ってください(私はsolr 6.5。*バージョンを使用しています):
ステップ1:
country-synonyms.txt テキストファイルをダウンロードして、以下のパスに配置します。
パス:\ solr-6.5.1\server\solr\yourCore\conf
yourCore:コアの名前はそれに応じて変更する必要があります
ステップ2:
上記と同じパスのmanaged-schemaファイルにフィールドタイプを追加します。
<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:同じタイプcountryのフィールド(国籍)を追加しますファイル(管理スキーマ)。
<field name="Nationality" type="country" indexed="true" stored="true"/>
ステップ4:solrを再起動します。
solr restart -p <your solr port>
ステップ5:
次に、Nationality。***を含むフィールドを使用してデータをインポートします。
ステップ6:
次に、以下のケースでクエリを実行してテストします。
クエリ:
上記のクエリはすべて同じ結果になります。
注:*** solrの再起動を含む上記の手順を実行した後にのみ、データをインポートします。既存のデータでは機能しない可能性があります(詳細については、 AnalyzersTokenizersTokenFilters を参照してください)
新しいSolrの観点から答えを完成させるために、同義語に関して1つ追加したいと思います。 Solrの最近のバージョンは、クエリおよびインデックス作成時にマルチワードシノニムを適切に処理します。
新しい同義語の実装を使用するには、次のような別のフィルターを使用する必要があります。
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
また、indexの時間中にそれらを使用している場合は、分析チェーン定義の最後に次のフィルターを配置します。
<filter class="solr.FlattenGraphFilterFactory"/>
うまくいけば、誰かがそれが役に立つと思うでしょう:)