elasticsearch term的一个疑问

term 属于低级查询,不会进行解析,

但是我测了一下,发现解析了

这是 setting 和 mapping:

{
  "pingyin": {

    "mappings": {
      "t1": {
        "properties": {
          "name": {
            "type": "string",
            "boost": 10,
            "term_vector": "with_positions_offsets",
            "fields": {
              "primitive": {
                "type": "string",
                "store": true,
                "analyzer": "keyword"
              }
            },
            "analyzer": "pinyin_analyzer"
          }
        }
      }
    },
    "settings": {
      "index": {
        "analysis": {
          "analyzer": {
            "pinyin_analyzer": {
              "filter": "word_delimiter",
              "tokenizer": "my_pinyin"
            }
          },
          "tokenizer": {
            "my_pinyin": {
              "padding_char": " ",
              "type": "pinyin",
              "first_letter": "prefix"
            }
          }
        },
        "number_of_shards": "5",
        "number_of_replicas": "1",
        "uuid": "lllRMvCLQ4WFpbO1KZyRCg",
        "version": {
          "created": "2030399"
        }
      }
    },
    "warmers": {}
  }
}

我的查询:

{
    "query": {
        "term" : {
            "name" : "zxy"
        }
    }
}

结果还是走了拼音的分析器,并搜出了结果

让我很不解,是我理解的不对,还是配置错了??

阅读 3.3k
1 个回答

你mapping都设置的是分词器用keyword,查询过程中肯定会按照分词器去查询的。无论你用啥。
像这类你可以设定一个数组,name用分词的,name.raw用不分词的,这类检索检索name.raw就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进