オランダ語とドイツ語には、新しい単語に結合できる単語があります。複合語。
たとえば、「accountmanager」は、「account」と「manager」という単語を組み合わせた 1 つの単語と見なされます。ユーザーは、ドキュメントとクエリで「accountmanager」と「account manager」を使用し、両方のクエリで同じ結果を期待します。
単語を分解(分割)できるようにするために、solr には、スキーマで構成した辞書フィルターがあります。
<filter class="solr.DictionaryCompoundWordTokenFilterFactory" dictionary="../../compound-word-dictionary.txt" minWordSize="8" minSubwordSize="4" maxSubwordSize="15" onlyLongestMatch="true"/>
Compound-word-dictionary.txt ファイルには、複合語を分解するために使用される単語のリストが含まれています。このリストには、たとえば「アカウント」と「マネージャー」という単語があります。
クエリ "accountmanager": (term text) で検索するときに Solr デバッガーで分析すると、分解結果は問題ありません。
- アカウントマネージャー
- アカウント
- マネジャー
ただし、この結果は OR ステートメントとして扱われ、少なくとも 1 つの用語が含まれるすべてのドキュメントが検索されます。AND ステートメントのように動作させたい (したがって、ドキュメントに「アカウント」と「マネージャー」の両方の用語を含む結果のみが必要です)。
スキーマの defaultOperator を「AND」に設定しようとしましたが、edismaxを使用すると無視されます。そのため、提案されたMin-should-Matchを 100% (mm=100%) に設定しましたが、やはり望ましい結果はありません。スキーマでディクショナリ フィルタの属性を微調整しても、動作は「AND」に変わりません。
辞書の複合語トークン ファクトリを使用しているときにこの動作に遭遇し、AND ステートメントのように動作させるための解決策を知っている人はいますか?