Solr复合词标记器 - 结果视为OR语句

Seb*_*man 6 solr filter

荷兰语和德语确实有可以结合到词的单词; 复合词.

例如,"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语句?

Per*_*ium 4

它按预期工作,DictionaryCompoundWordTokenFilterFactory 只是添加它找到的“内部单词”,在本例中是“account”和“manager”,但也可能只是其中一个,例如单词是“accountbanana”和“banana”字典中没有,只有“帐户”才会被添加。

这有助于某人寻找“经理”并找到具有“客户经理”的文档。

为了获得您想要的行为(我知道您正在查询端应用此行为),您可以使用使 accountmanager=“account manager” 的字典