Elasticsearch多字段映射:term查询text字段无结果问题咨询
问题分析与解决
你的操作没问题,核心是对term查询和多字段映射的配合理解有偏差:
为什么当前term查询无结果?
你定义的name字段是text类型,Elasticsearch会默认用标准分词器把"abc llc"拆成abc、llc两个独立的词存入倒排索引。而term查询是精确匹配倒排索引中的单个词项,你用它搜索完整的"abc llc",自然找不到匹配的词项。正确的精确匹配方式
你已经在映射里定义了name.keyword这个keyword类型的子字段,它会把整个"abc llc"作为单个完整词项存入索引,所以term查询需要指定这个子字段:GET multi_mapping_test/_search { "query": { "term": { "name.keyword": { "value": "abc llc" } } } }多字段映射的正确用法
- 用
name(text类型)配合match查询做全文搜索,比如:GET multi_mapping_test/_search { "query": { "match": { "name": "abc" } } } - 用
name.keyword(keyword类型)配合term查询做精确匹配,刚好满足你的两种需求。
- 用
内容的提问来源于stack exchange,提问作者Bhavik Vagadia
相关产品推荐
相关产品推荐

