荷兰语和德语确实有可以组合成新词的词;复合词。
例如,“accountmanager”被认为是一个词,由“account”和“manager”这两个词复合而成。我们的用户将在文档和查询中使用“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 文件包含用于分解复合词的单词列表。在此列表中,您会找到例如“帐户”和“经理”这两个词。
当在 Solr 调试器中使用查询“accountmanager”搜索时分析时,分解结果是好的:(术语文本):
- 客户经理
- 帐户
- 经理
但是,此结果被视为 OR 语句,并查找其中至少包含一个术语的所有文档。我希望它表现得像一个 AND 语句(所以我只想要文档中同时包含术语“帐户”和“经理”的结果)。
我尝试将架构中的 defaultOperator 设置为“AND”,但是在使用edismax时会忽略它。所以我将建议的Min-should-Match设置为 100% (mm=100%),同样没有任何期望的结果。在架构中调整字典过滤器的属性不会将行为更改为“AND”。
有没有人在使用字典复合词标记工厂时遇到过这种行为并且知道一个解决方案让它表现得像 AND 语句?