• 精确值字段(Exact-value Fields)

    精确值字段(Exact-value Fields)

    在结束对于多字段查询的讨论之前的最后一个话题是作为not_analyzed类型的精确值字段。在multi_match查询中将not_analyzed字段混合到analyzed字段中是没有益处的。

    原因可以通过validate-query进行简单地验证,假设我们将title字段设置为not_analyzed:

    1. GET /_validate/query?explain
    2. {
    3. "query": {
    4. "multi_match": {
    5. "query": "peter smith",
    6. "type": "cross_fields",
    7. "fields": [ "title", "first_name", "last_name" ]
    8. }
    9. }
    10. }

    // SENSE: 110_Multi_Field_Search/55_Not_analyzed.json

    因为title字段时没有被解析的,它会以将整个查询字符串作为一个词条进行搜索!

    1. title:peter smith
    2. (
    3. blended("peter", fields: [first_name, last_name])
    4. blended("smith", fields: [first_name, last_name])
    5. )

    很显然该词条在title字段的倒排索引中并不存在,因此永远不可能被找到。在multi_match查询中避免使用not_analyzed字段。