弹性搜索:常规和条件过滤器

时间:2015-06-04 19:03:10

标签: elasticsearch conditional apply exists

我正在使用弹性搜索,查询match_all和过滤。在我的情况下,我想应用一般过滤器和条件过滤器。

这里是伪:

  1. 查询:匹配所有(工作正常)
  2. d1和d2之间的过滤范围日期(没有项目符号3正常工作)
  3. 过滤器(仅当字段存在时才适用,但如何?)
  4. 请参阅以下代码。如果“groups”字段存在,我只想应用“groups”过滤器!在这种情况下,“存在”过滤器不会生效。

    while [ -z $prompt ];
      do read -p "Continue (y/n)?" choice;
      case "$choice" in
        y|Y ) prompt=true; break;;
        n|N ) exit 0;;
      esac;
    done;
    prompt=;
    

1 个答案:

答案 0 :(得分:2)

试试这个

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "date": {
                  "from": "2015-06-01",
                  "to": "2015-06-30"
                }
              }
            },
            {
              "bool": {
                "should": [
                  {
                    "missing": {
                      "field": "groups"
                    }
                  },
                  {
                    "bool": {
                      "must": {
                        "term": {
                          "groups.sex": "w"
                        }
                      },
                      "should": {
                        "terms": {"groups.categories.id": [7,10]}
                      }
                    }
                  }
                ]
              }
            }
          ],
          "must_not": {
            "term": {
              "e.state": 0
            }
          }
        }
      }
    }
  }
}