使用弹性搜索进行条件查询

时间:2017-07-12 05:38:35

标签: regex elasticsearch conditional

我的弹性搜索索引如下所示。

title:The Godfather
year:1972
genres:Crime & Drama

title:Lawrence of Arabia
year:1962
genres:Adventure,Biography &Drama

title:To Kill a Mockingbird
year:1973
genres:Mystery

title:Apocalypse Now
year:1975
genres:Thriller

我正在尝试在elasticsearch中编写查询,如果它包含&如果它比在相同的字段上执行其他匹配操作。如果generes不包含&amp ;,它应该熟练其他匹配操作。基本上我正在寻找Elasticsearch中的条件。

下面是我的查询,但它似乎没有正常工作..

{
  "query": {
          "bool": {
            "should": [
              {
                "regexp": {
                  "genres": ".*&.*"
                }
              },
              {"match": {"genres":   {"query": "Adventure"}}}
            ]
          }
  }
}

我在stackOverFlow上遵循以下建议。 How to write a conditional query with Elasticsearch?

1 个答案:

答案 0 :(得分:1)

你可以嵌套bool查询,所以你可以做的只有一个顶级bool查询只有一个should子句,然后在那个should子句中,你还有两个bool查询。其中每个部分都包含must部分,其中包含对&whatever else的搜索。喜欢这个

bool:
  should:
    - bool:
      must: [ _search for & and whatever else_ ]
    - bool:
      must: [ _search for another criteria_]

希望这有帮助!