v2.4带来了比v1.6更多(不需要的)结果。两者之间的映射是相同的。设置(分析器,标记器等)在两者之间是相同的。分析器非常复杂,具有标记化和同义词。
查询分析是:
GET /partsearch/epicorpart/_validate/query?explain
{
"query": {
"match": {
"partDescription" : {
"query": "qp-09-04",
"operator": "and"
}
}
}
}
v2.4的分析结果:
"+(partDescription:qp-09-04 partDescription:qp partDescription:quality-plan partDescription:09 partDescription:04 partDescription:qp partDescription:quality-plan partDescription:-09-04 partDescription:09 partDescription:04) #ConstantScore(+ConstantScore(_type:epicorpart))"
v1.6的分析结果:
"filtered(+partDescription:qp-09-04 +(partDescription:qp partDescription:quality-plan partDescription:09 partDescription:04) +(partDescription:qp partDescription:quality-plan partDescription:-09-04 partDescription:09 partDescription:04))->cache(_type:epicorpart)"
更新 在v1.6和v2.4中找到了我的索引之间的差异。当比较_analyze?analyzer = descriptionanalyzer& text = QP-01的输出时,输出是不同的,如下面链接的要点所示。两者都使用相同的分析仪。在v2.4中,所有令牌的位置编号为0,而在V1.6中,令牌具有不同的位置编号。还有一些类型不同,2.4有" word" 1.6具有"同义词"。看起来位置编号是令牌在上面显示的解释结果中的分组方式。
更新2: 把问题缩小了一点点。我在两个版本之间看到的差异似乎归结为同义词令牌过滤器。在版本1.6中,一旦同义词令牌过滤器执行其操作,令牌位置编号就会更改。版本2.4中的同义词令牌过滤器不会更改令牌位置编号。
使用设置,映射和_analyze输出Gist :https://gist.github.com/cooperhj/409f25f8d3274847a1a117fa47a9e0de
建议?