ElasticSearch查询求助:筛选索引失败的PDF文档
问题解决思路与方案
核心原因
你的查询问题源于字段类型与查询方式不匹配,以及可能的存储值大小写与查询值不一致。
步骤1:确认字段映射类型
先执行命令查看Document.Extension的具体映射,明确字段类型:
curl -X GET "httpes://myelasticdb/_mapping/field/Document.Extension"
步骤2:修正查询语句
根据映射结果选择以下两种方案之一:
方案一:适配text字段的分词规则
如果Document.Extension是text类型,Elasticsearch默认分词器会把存储值转为小写(比如实际存的是pdf),因此需要用小写值匹配:
{ "query": { "bool": { "must": [ {"term": {"Document.Status.Indexed": false}}, {"match": {"Document.Extension": "pdf"}} ] } } }
注:Document.Status.Indexed是布尔类型,用term查询比match更精准。
方案二:使用keyword子字段精确匹配
如果映射中存在Document.Extension.keyword(text字段默认生成的精确匹配子字段),可以直接用term查询原始大小写值:
{ "query": { "bool": { "must": [ {"term": {"Document.Status.Indexed": false}}, {"term": {"Document.Extension.keyword": "PDF"}} ] } } }
补充:之前term查询无结果的原因
- 你之前的
{"term": {"Reason": "Failed"}}路径错误,正确路径应为Document.Status.Reason; - 如果
Document.Status.Reason是text类型,同样需要用match或者查询其keyword子字段(Document.Status.Reason.keyword: "Failed")才能精确匹配。
内容的提问来源于stack exchange,提问作者jcrow
相关产品推荐
相关产品推荐

