Exact-Value 精确值字段

edit

在结束多字段查询这个话题之前,我们最后要讨论的是精确值 not_analyzed 未分析字段。将 not_analyzed 字段与 multi_matchanalyzed 字段混在一起没有多大用处。

原因可以通过查看查询的 explanation 解释得到,设想将 title 字段设置成 not_analyzed

GET /_validate/query?explain
{
    "query": {
        "multi_match": {
            "query":       "peter smith",
            "type":        "cross_fields",
            "fields":      [ "title", "first_name", "last_name" ]
        }
    }
}

因为 title 字段是未分析过的,Elasticsearch 会将 “peter smith” 这个完整的字符串作为查询条件来搜索!

title:peter smith
(
    blended("peter", fields: [first_name, last_name])
    blended("smith", fields: [first_name, last_name])
)

显然这个项不在 title 的倒排索引中,所以需要在 multi_match 查询中避免使用 not_analyzed 字段。