关于Solr 7.2.1中eDisMax查询解析器停用词处理的技术问询
eDisMax查询解析器在该场景下的停用词处理逻辑
针对你在Solr 7.2.1的techproducts示例中遇到的情况,我来拆解eDisMax的停用词处理逻辑:
1. 停用词的核心作用路径:依赖查询字段的分析链
eDisMax本身并不直接处理停用词,而是完全依赖你指定查询字段对应的分析器配置。在你的查询里,qf参数明确了要在name^0.75 manu cat^3.0 features^10.0这些字段中检索,而techproducts示例里这些字段(比如features、name)默认会配置带有停用词过滤器的分析链——也就是引用你修改过的stopwords.txt文件的StopFilterFactory。
当你提交q=x a b这个查询时,eDisMax会先把查询字符串拆成x、a、b三个独立查询词,然后针对每个词,依次应用qf里每个字段的分析器处理:
- 其中查询词
a因为被你添加进了停用词列表,会被分析链里的停用词过滤器直接过滤掉,不会参与后续的文档匹配和得分计算。
2. 两个查询的实际执行逻辑完全等价
你提交的这两个查询:
q=x b&fl=id,score,price&sort=score desc&qf=name^0.75 manu cat^3.0 features^10.0&defType=edismax
q=x a b&fl=id,score,price&sort=score desc&qf=name^0.75 manu cat^3.0 features^10.0&defType=edismax
经过停用词过滤后,第二个查询里的a会被彻底移除,最终实际执行的检索逻辑和第一个查询完全一致——都是在指定字段中匹配x和b两个词,所以返回的结果集、文档得分应该完全相同。
3. Solr 7.2.1版本的额外注意点
- 如果发现
a没被过滤,先去Solr Admin的Analysis页面验证:输入a并选择对应字段,查看分析后的结果是否为空,以此确认分析链是否正确引用了修改后的stopwords.txt。 - eDisMax的
mm(最小匹配数)参数会基于过滤后的查询词数量计算,比如原查询是3个词,过滤后剩2个,mm就会按2个词来判断文档的匹配要求。
内容的提问来源于stack exchange,提问作者zelinka
相关产品推荐
相关产品推荐

