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" :  "蝌蚪"
    }
  ]
}

现在使用查询小鲨鱼和大蝌蚪,则显示查询结果为空

 

posted on 2024-03-15 11:43  欢跳的心  阅读(25)  评论(0编辑  收藏  举报