Elasticsearch 中的 nested 类型
参考官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/nested.html
使用netsted 类型,可以实现扁平化处理,避免查询出没有出现的组合
下面举例说明:
#我们插入大鲨鱼和小蝌蚪 PUT my_index/_doc/1 { "group" : "fans", "user" : [ { "first" : "大", "last" : "鲨鱼" }, { "first" : "小", "last" : "蝌蚪" } ] } #搜索大蝌蚪:这里应该是查不到的,可是结果是找到了大鲨鱼和小蝌蚪,结果错误 GET my_index/_search { "query": { "bool": { "must": [ { "match": { "user.first": "大" }}, { "match": { "user.last": "蝌蚪" }} ] } } } #搜索小鲨鱼:这里应该是查不到的,可是结果是找到了大鲨鱼和小蝌蚪,结果错误 GET my_index/_search { "query": { "bool": { "must": [ { "match": { "user.first": "小" }}, { "match": { "user.last": "鲨鱼" }} ] } } } #搜索鲨鱼蝌蚪:结果为空,正确 GET my_index/_search { "query": { "bool": { "must": [ { "match": { "user.first": "鲨鱼" }}, { "match": { "user.last": "蝌蚪" }} ] } } } #搜索蝌蚪鲨鱼:结果为空,正确 GET my_index/_search { "query": { "bool": { "must": [ { "match": { "user.first": "蝌蚪" }}, { "match": { "user.last": "鲨鱼" }} ] } } }
我们插入大鲨鱼和小蝌蚪,在查找时,使用小鲨鱼和大蝌蚪,也可以查询到结果,这个是我们不希望看到的,这里就需要使用nested类型
使用nested类型后:
#先删除原来的索引 DELETE my_index #使用nested类型 PUT my_index { "mappings": { "properties": { "user": { "type": "nested" } } } } #新建索引 PUT my_index/_doc/1 { "group" : "fans", "user" : [ { "first" : "大", "last" : "鲨鱼" }, { "first" : "小", "last" : "蝌蚪" } ] }
现在使用查询小鲨鱼和大蝌蚪,则显示查询结果为空