我已经在字段配置中启用了SynonymGraphFilter
以便支持多词同义词(我正在使用Solr 7.6)。这是我的字段配置:
<fieldType name="text_syn" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" ignoreCase="true" synonyms="synonyms.txt"/>
</analyzer>
</fieldType>
<field name="title" type="text_syn" indexed="true">
这是我的synonyms.txt
文件:
frozen dinner,microwave food
方案1:蓝色衬衫(无同义词查询)
这是我的第一个Solr查询:
http://localhost:8983/solr/base/search?q=blue+shirt&qf=title&defType=edismax&debugQuery=on
这是我在调试输出中看到的已解析查询:
+((title:blue) (title:shirt))
方案2:冷冻晚餐(带有同义词的查询)
现在,这是我的第二个Solr查询:
http://localhost:8983/solr/base/search?q=frozen+dinner&qf=title&defType=edismax&debugQuery=on
这是我在调试输出中看到的已解析查询:
+(((+title:microwave +title:food) (+title:frozen +title:dinner)))
我想知道为什么第一个查询查找包含两个查询令牌中至少一个的文档,而第二个查询查找具有两个查询令牌的文档?我会理解它是否查找同义词的两个标记(即微波和食物),以避免sausagization问题。但是我想至少在原始查询上获得部分匹配(即,它也应该匹配仅包含令牌“ dinner”的文档)。
谁会知道为什么在具有和不具有同义词的查询之间,行为是不同的?如果我想对也有同义词的查询进行部分匹配,该如何解决呢?
理想情况下,我希望第二种情况下的解析查询为:
+(((+title:microwave +title:food) (title:frozen title:dinner)))
对此我将不胜感激。谢谢!