elasticsearch - 如何在ElasticSearch中的数组中搜索单独的键和值字段?

标签 elasticsearch

我的ElasticSearch文档包含一个嵌套的表单域集合。每个字段都有一个名称和一个值,并且映射如下:

form: {
  properties: {
    id:         { type: 'integer' },
    name:       { type: 'text' },
    form_data:  {
      type: 'nested',
      properties: {
        'name':  { type: 'keyword' },
        'value': { type: 'text', analyzer: 'full_text_analyzer' }
      }
    }
  }
}

我需要允许用户搜索多个表单字段以完善他们的搜索。他们可以选择要搜索的字段,并为每个字段分配一个值。例如
applicant_name = 'Joe'
pet_type = 'dog'

这将找到所有包含一个名为applicant_name的字段和一个名为Joe以及一个值模糊匹配的pet_type的字段,该字段具有与dog模糊匹配的值。

我正在尝试执行的查询如下:
{
  "query": {
    "bool": {
      "must": [{
        "nested": {
          "path": "form_data",
          "query": {
            "filter": {
              "bool": {
                "must": [
                  {
                    "bool": {
                      "must": [
                        { "term": { "form_data.name": "applicant_name" } },
                        { "match": { "form_data.value": "Joe" } }
                      ]
                    }
                  },
                  {
                    "bool": {
                      "must": [
                        { "term": { "form_data.name": "pet_type" } },
                        { "match": { "form_data.value": "dog" } }
                      ]
                    }
                  }
                ]
              }
            }
          }
        }
      }]
    }
  }
}

但是,我得到0个结果。

最佳答案

尝试在您的初始“必须”子句中按条件使用嵌套查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "form_data",
            "query": {
              "bool": {
                "must": [
                  { "term": { "form_data.name": "applicant_name" } },
                  { "match": { "form_data.value": "Joe" } }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "form_data",
            "query": {
              "bool": {
                "must": [
                  { "term": { "form_data.name": "pet_type" } },
                  { "match": { "form_data.value": "dog" } }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

关于elasticsearch - 如何在ElasticSearch中的数组中搜索单独的键和值字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091416/

相关文章:

reactjs - 当需要在数组类型的弹性场上进行搜索时,没有显示有关DataSearch的建议

sql - Azure弹性作业删除

elasticsearch - Elasticsearch:如何在每个存储桶上计算平均值_score?

elasticsearch - Pyspark使用saveAsNewAPIHadoopFile将DStream数据写入Elasticsearch

ruby - ElasticSearch/Ruby - 返回日期直方图格式?

elasticsearch - 计算 Elasticsearch 聚合中的非唯一项?

elasticsearch - 如何配置两个节点连接到elasticsearch中的同一集群?

python - 如何合并两个DSL查询以进行聚合和过滤

elasticsearch - 如何检查Elasticsearch查询性能?

java - spring boot 2 与 elasticsearch 2.4 通过 spring data