荷兰语和德语确实有可以结合到新词的单词; 复合词.
例如,"accountmanager"被认为是一个单词,由"account"和"manager"组成.我们的用户将在文档和查询中使用"accountmanager"和"account manager",并期望两个查询都获得相同的结果.
为了能够解压缩(拆分)单词,solr有一个我在模式中配置的字典过滤器:
<filter class="solr.DictionaryCompoundWordTokenFilterFactory" dictionary="../../compound-word-dictionary.txt" minWordSize="8" minSubwordSize="4" maxSubwordSize="15" onlyLongestMatch="true"/>
Run Code Online (Sandbox Code Playgroud)
compound-word-dictionary.txt文件包含用于解压缩复合词的单词列表.在此列表中,您将找到例如单词"account"和"manager".
当使用查询"accountmanager"进行搜索时,在Solr调试器中进行分析时,解压缩结果是正常的:(术语文本):
但是,此结果被视为OR语句,并查找其中至少包含一个术语的所有文档.我希望它表现得像一个AND语句(所以我只想要在文档中同时包含术语"account"和"manager"的结果).
我已经尝试将架构中的defaultOperator设置为"AND",但在使用edismax时会忽略它.因此,我将建议的Min-should-Match设置为100%(mm = 100%),同样没有任何期望的结果.调整模式中字典过滤器的属性不会将行为更改为"AND".
有没有人在使用字典复合词令牌工厂时遇到这种行为,并且知道一个解决方案让它的行为像一个AND语句?
它按预期工作,DictionaryCompoundWordTokenFilterFactory 只是添加它找到的“内部单词”,在本例中是“account”和“manager”,但也可能只是其中一个,例如单词是“accountbanana”和“banana”字典中没有,只有“帐户”才会被添加。
这有助于某人寻找“经理”并找到具有“客户经理”的文档。
为了获得您想要的行为(我知道您正在查询端应用此行为),您可以使用使 accountmanager=“account manager” 的字典