ElasticSearch DSL查询特定字段无结果及keyword后缀作用咨询
字段查询需添加keyword后缀的原因
Elasticsearch默认会对写入的字符串类型字段配置多字段映射规则:
- 主字段为
text类型:写入时会执行分词处理,拆分出多个独立词条,仅适用于全文检索场景。直接对text类型字段执行精确匹配、前缀匹配、聚合等操作会触发语法错误,就是你遇到的不加后缀就返回内部错误的原因。 - 自动生成的
keyword子字段为keyword类型:写入时不会做分词处理,保留原始完整字符串,专门用于精确匹配、前缀匹配、排序、聚合这类操作,因此你需要加keyword后缀才能正常执行查询。
created字段前缀查询返回0结果的根因
你给出的created字段值符合标准日期格式,大概率索引自动将created字段映射为date类型,而非字符串类型,因此created.keyword子字段不存在,你对不存在的字段做前缀查询自然返回0命中。
日期类型字段不能用字符串前缀规则查询,应该使用范围查询匹配2021年的所有数据。
可用查询语句
你可以先执行以下命令确认索引的字段映射:
GET /<你的索引名称>/_mapping
确认created为date类型后,使用如下查询即可得到符合要求的结果:
{ "query": { "bool": { "must": [ { "term": { "data_type.keyword": "ISOBUS"} }, { "range": { "created": { "gte": "2021-01-01", "lt": "2022-01-01" } } } ] } } }
如果确认created确实是字符串类型,可检查写入的created值是否存在前后不可见空格,或者调整prefix查询的匹配规则即可。
内容的提问来源于stack exchange,提问作者Jiren
相关产品推荐
相关产品推荐

