如何使用Elasticsearch查询数组中的任何匹配?

时间:2016-01-15 19:28:26

标签: elasticsearch

我有一个问题数组,可以为多个项目设置是/否值,以及一个可以返回true / false的布尔值。

查询应返回类似于此的数组数据:

"QUESTIONS": [
{
   "ONE_IND": "Y or N",
   "TWO_IND": "Y or N",
   "THREE_IND": "Y or N",
   "FOUR_IND": "Y or N",
   "FIVE_IND": "Y or N",
   "SIX_IND": "Y or N",
   "BOOLEAN_IND": true or false
}

我还有一些其他术语过滤器,但我需要的部分是如何专门查询数组,以便我可以匹配至少一个值。我真正想要的就是在java中使用它来查看数组是否为空,如:

if(array.length > 0) {
   //Then do something here.
};

我尝试的是这样的,但是它没有回报任何东西:

GET test_<name>/_search
{
  "query": {
    "nested": {
      "path": "VALUE",
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "VALUE.ANOTHER_IND": "Y"
              }
            },
             {
              "match": {
                "VALUE.MY_QUESTIONS_ARRAY" : "SOME_VALUE"
              }  
            },
            {
              "term": {
                "VALUE.YET_ANOTHER_IND": "Y"
              }
            }
          ]
        }
      }
    }
  }
}

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

我曾试图使用&#34;存在&#34;对此进行过滤,但我首先使用了这个,然后使用了不丢失。

缺失的代码是:

GET <path>/_search
{
  "query": {
    "nested": {
      "path": "VALUE",
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "VALUE.ONE_IND": "Y"
              }
            },
            {
              "filtered": {
                "filter": {
                  "missing": {
                    "field": "VALUE.MY_QUESTIONS_ARRAY"
                  }
                }
              }
            },
            {
              "term": {
                "VALUE.TWO_IND": "N"
              }
            },
            {
              "term": {
                "VALUE.THREE_IND": "Y"
              }
            }
          ]
        }
      }
    }
  }
}

并且没有遗漏的代码是,这正是我想要得到的:

GET <path>/_search
{
  "query": {
    "nested": {
      "path": "VALUE",
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "VALUE.ONE_IND": "Y"
              }
            },
            {
              "filtered": {
                "filter": {
                  "not": {
                    "filter": {
                      "missing": {
                        "field": "VALUE.MY_QUESTIONS_ARRAY"
                      }
                    }
                  }
                }
              }
            },
            {
              "term": {
                "VALUE.TWO_IND": "N"
              }
            },
            {
              "term": {
                "VALUE.THREE_IND": "Y"
              }
            }
          ]
        }
      }
    }
  }
}

这样我基本上都在寻找一个非空的数组。可能有其他方法可以做到这一点,但它有效,我发布它,以便其他人可能会发现它有用。