代码之家  ›  专栏  ›  技术社区  ›  Čamo

Elasticsearch嵌套查询和排序

  •  0
  • Čamo  · 技术社区  · 6 年前

    https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_nested_sorting_examples 是一个不显示文档对象外观的示例。看起来我应该想象搜索查询的映射。查询如下所示:

    POST /_search
    {
       "query": {
          "nested": {
             "path": "parent",
             "query": {
                "bool": {
                    "must": {"range": {"parent.age": {"gte": 21}}},
                    "filter": {
                        "nested": {
                            "path": "parent.child",
                            "query": {"match": {"parent.child.name": "matt"}}
                        }
                    }
                }
             }
          }
       },
       "sort" : [
          {
             "parent.child.age" : {
                "mode" :  "min",
                "order" : "asc",
                "nested": {
                   "path": "parent",
                   "filter": {
                      "range": {"parent.age": {"gte": 21}}
                   },
                   "nested": {
                      "path": "parent.child",
                      "filter": {
                         "match": {"parent.child.name": "matt"}
                      }
                   }
                }
             }
          }
       ]
    }
    

    有没有人可以写一个文档结构来进行这个查询?

    2 回复  |  直到 6 年前
        1
  •  1
  •   nitzien    6 年前

    像这样的。

    {
        "parent": {
            "name": "Elasti Sorch",
            "age": 23,
            "child": [
               {
                  "name": "Kibana Lion",
                  "age": 12
               }, 
               {
                  "name": "Matt",
                  "age": 15
               }
            ] 
        }
    }
    
        2
  •  1
  •   Siddu    6 年前

    弹性嵌套意味着它是一个对象数组。要在弹性搜索中将对象数组存储到字段中,必须在创建索引时将字段映射到嵌套的。

    PUT parent
           {
           "mappings": {
            "doc":{
          "properties": {
            "name":{
              "type": "text"
            },
            "age":{
              "type": "integer"
            },
            "child":{
              "type": "nested",
              "properties": {
                "name":{
                  "type":"text"
                },
                "age":{
                  "type":"integer"
                }
              }
    
            }
          }
        }
      }
    }
    

    可以这样插入一个嵌套文档示例

    POST parent/doc
    {
      "name":"abc",
      "age":50,
      "child":[
        {
          "name":"son1",
          "age":25
        },
        {
          "name":"adughter1",
          "age":20
        }
        ]
    }