原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/_exact_value_fields.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/_exact_value_fields.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/_exact_value_fields.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
Exact-Value 精确值字段edit
在结束多字段查询这个话题之前,我们最后要讨论的是精确值 not_analyzed
未分析字段。将 not_analyzed
字段与 multi_match
中 analyzed
字段混在一起没有多大用处。
原因可以通过查看查询的 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
字段。