如何通过Elasticsearch Query DSL在Kibana中批量查询指定ISIN的交易记录
问题原因
match_phrase属于全文查询,会对输入的ISIN字符串做和索引阶段一致的分词处理后再做短语匹配,所以可以正常返回结果terms属于精确值查询,不会对输入内容做分词,会直接用输入的完整ISIN字符串和索引里的词条做完全匹配。你当前用的obdetails.isin大概率是text类型,索引阶段被分词生成了和完整ISIN不一致的词条,所以匹配不到结果。
解决方案
ES默认会给所有字符串类型字段自动生成keyword类型的子字段,专门用于精确匹配,你直接修改查询语句的字段名即可:
{ "query": { "terms": { "obdetails.isin.keyword": [ "CH0357659488", "CH0315622966"], "boost": 1.0 } } }
如果你的索引没有自动生成keyword子字段,可以先查看索引映射确认obdetails.isin对应的精确匹配字段名,替换上方的字段名即可。
terms查询默认支持最多65536个匹配项,你200个ISIN的查询需求完全可以满足,性能远高于手写多个match_phrase的bool查询。
内容的提问来源于stack exchange,提问作者Schnexit
相关产品推荐
相关产品推荐

