一尘不染

字词查询和匹配项有什么区别?

elasticsearch

我有未分析字符串字段的文档(由映射强制执行或全局设置)。我试图了解两者之间的实际区别是什么

{
    "query": {
        "bool": {
            "must": [
                {"match": {"hostname": "hello"}},
            ]
        }
    }
}

{
    "query": {
        "term": {
            "hostname": "hello"
        }
    }
}

我在术语查询的文档中看到,分析字符串时有区别(这不是我的情况)。 有理由使用termvs match吗?


阅读 271

收藏
2020-06-22

共1个答案

一尘不染

term查询中,hello不分析搜索到的术语(即),并且将其与倒排索引中存在的术语完全匹配。

match查询中,hello首先分析搜索到的术语(即),然后将其与倒排索引中存在的术语进行匹配。

在你的情况下,由于hostnamenot_analyzed在映射,你的第一选择应该是使用term,因为它是没有意义的分析在搜索时的一个术语用来搜索已经不是在索引时间首先分析了相同的词语查询。

2020-06-22