同义词令牌过滤器在elasticsearch v2.4 vs v1.6中的工作方式不同

时间:2016-10-26 21:13:03

标签: elasticsearch

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

建议?

0 个答案:

没有答案