Elasticsearch无法识别短语术语?

时间:2019-10-03 07:16:09

标签: elasticsearch

我正在尝试计算terms or keywords从指定查询中出现了多少次文档?

这是我的“内容”字段的映射

Content Field Mapping

这是我的汇总查询:

"aggs" => [
    "KEYWORDS" => [
        "filters" => [
            "filters" => [
                "term1" => [
                    "term" => [
                        'content' => "isko"
                    ]
                ],
                "term2" => [
                    "term" => [
                        'content' => "manila"
                    ]
                ]
            ]
        ]
    ]
]

这是响应:

Output 1

我几乎接近期望的输出,但是当我想要 right 短语/关键字时,Elasticsearch无法识别它/

"aggs" => [
    "KEYWORDS" => [
        "filters" => [
            "filters" => [
                "term1" => [
                    "term" => [
                        'content' => "mayor isko moreno"
                    ]
                ],
                "term2" => [
                    "term" => [
                        'content' => "mayor vico sotto"
                    ]
                ]
            ]
        ]
    ]
]

响应

Output 2

这是否意味着Elasticsearch无法识别短语?

这是我的整个查询: My ES Query

2 个答案:

答案 0 :(得分:0)

来自docs

  

返回在提供的字段中包含确切术语的文档。

术语查询不解析查询字符串,它正在寻找完全匹配的词。 但是,您的字符串似乎已使用默认分析器进行索引(我假设您的单个单词查询按预期工作)。表示其内容松散地说是“作为一个单词”存储的。

您需要查询content.keyword字段,而该字段没有进行分析即可获得整个短语的完全匹配。

答案 1 :(得分:0)

如果要使用准确的内容进行过滤,请尝试将过滤器应用于未分析的字段,这将达到您的目的。 下面是代码。

"aggs" => [
    "KEYWORDS" => [
        "filters" => [
            "filters" => [
                "term1" => [
                    "term" => [
                        'content.keyword' => "mayor isko moreno"
                    ]
                ],
                "term2" => [
                    "term" => [
                        'content.keyword' => "mayor vico sotto"
                    ]
                ]
            ]
        ]
    ]
]