本文主要是介绍elasticsearch nested object查询带空格,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里总结一个实践的case,是关于elasticsearch中对于nested object类型的查询
问题背景
在保险业务中,存在投保人和被保人的概念,一般一个保单是只有一个投保人,一个被保人,也存在团单,一个投保人多个被保人。实际的需求是按照被保人的姓名去查询,结果发现返回的结果不匹配或者不存在命中的文档
问题分析
在我们业务中,因为数据库采用了分库分表,所以在b端画面的查询,如果去数据库查询,效率肯定会慢,因为多个库的数据,还存在分表,最后做聚合,性能方便肯定存在问题,最后采用elasticsearch对一些核心数据进行存储,供B端画面查询。
在出现问题后,分析了一下现有定义的elasticseach的文档mapping,发现对应的被保人姓名fullName是text类型,如果了解es,那么知道text类型的数据,是会被分词的,什么叫分词,可以自行查询了解一下。举个简单的例子,你输了的fullName为张三 里斯,如果你直接用张三 里斯去查询,无法命中,因为分词以后存储的可能是两个词 张三 和里斯,那么你想做精准匹配是无法实现的。
最后修改了fullName的type为keyword,keyword是不会被分词,且在搜索中的查询效率是高于其他的。
实验验证
定义一个nested object的索引mapping
PUT my_index
{"mappings": {"my_type": {"properties": {"user": {"type": "nested" ,"properties": {"first"
这篇关于elasticsearch nested object查询带空格的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!