ElasticSearch嵌套查询公式

时间:2015-04-23 17:09:28

标签: elasticsearch

我有这样的映射

{
    "experience": {
        "type": "nested",
        "properties": {
            "end": {
                "type": "string"
            },
            "organization": {
                "type": "nested",
                "properties": {
                    "details": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    }
                }
            }
        }
    }
}

现在我想做一个这样的查询:

{
  "nested": {
    "path": "experience",
    "query": {
      "bool": {
        "must": [{
          "match": {
            "experience.organization.name": {
              "query": company_name,
              "operator": "and"
            }
          }
        }, {
          "match": {
            "experience.end": "Present"
          }
        }]
      }
    }
  }
}

以上查询没有返回任何结果,这是索引和查询上述场景的正确方法吗?

我对路径变量的值应该感到困惑,因为organisation.nameend不在同一级别。

1 个答案:

答案 0 :(得分:1)

以下是您的代码的完整工作示例:

PUT index1/test1/_mapping
{
  "test1": {
    "properties": {
      "experience": {
        "type": "nested",
        "properties": {
          "end": {
            "type": "string"
          },
          "organization": {
            "type": "nested",
            "properties": {
              "details": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}

POST index1/test1
{
  "experience": {
    "end": "Present",
    "organization": {
      "name": "org1",
      "details": "some details here"
    }
  }
}

GET index1/test1/_search
{
  "query": {
    "nested": {
      "path": "experience",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "end": "present"
              }
            },
            {
              "nested": {
                "path": "experience.organization",
                "query": {
                  "match": {
                    "name": "org1"
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}

话虽这么说,你有一个双嵌套对象,从长远来看,你可能会发现它会对你起作用。我会考虑展平数据,以便嵌套不是必需的。