术语查询和匹配查询之间有什么区别?

WoJ*_*WoJ 6 elasticsearch

我有没有分析字符串字段的文档(由映射强制或全局设置).我想了解两者之间的实际区别

{
    "query": {
        "bool": {
            "must": [
                {"match": {"hostname": "hello"}},
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和

{
    "query": {
        "term": {
            "hostname": "hello"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在文档中看到了术语查询,在分析字符串时存在差异(这不是我的情况).是否有理由使用termvs match?

Val*_*Val 11

在term查询中,搜索的术语(即hello)未被分析并且与反向索引中存在的术语完全匹配.

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

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