ElasticSearch中的关于对象数组查询,请注意要正确使用Nested类型

如题所述

第1个回答  2022-06-17
ElasticSearch中的关于对象数组查询,请注意要正确使用Nested类型,使用不当会导致检索时结果不正确。

假设张三和李四分别喜欢喝某品牌的啤酒,青岛(黑啤和白啤)燕京(黑啤和白啤)

要查询喜欢喝青岛白啤的用户

查询结果如下:

我们预想中,这个检索应该只能检索出李四,但是结果是张三也被匹配到了?为什么呢?

前面张三的文档将在内部转换为看起来更像这样的文档:

那我们该怎么做呢?

很简单,ElasticSearch官方告诉我们,将nested字段用于对象数组即可。

如果需要索引对象数组并保持数组中每个对象的独立性,请使用nested数据类型而不是object数据类型。

我们先将这条索引删除,重新定义mapping映射文件:

重新索引之前的张三、李四

请注意这个新查询,相应要增加nested path

得到正常结果:

参考文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html
相似回答