如何在Elastic Search中编写条件

时间:2017-10-27 11:28:37

标签: node.js elasticsearch

我想在弹性搜索中编写条件查询。这是我的完整查询,但它没有按预期工作。

像:

 {"query":{"bool":{"must":[{"nested":{"path":"ticket_group","score_mode":"max","inner_hits":{"from":0,"size":10000},"query":{"bool":{"must":[{"range":{"ticket_group.available":{"gte":1}}},{"bool":{"minimum_should_match":1,"should":[{"bool":{"must":[{"match":{"ticket_group.customer_id":1}},{"match":{"ticket_group.ticket_type":1}},{"match":{"ticket_group.individual_purchase":1}}]}},{"bool":{"must_not":[{"match":{"ticket_group.ticket_type":1}}]}}]}},{"terms":{"ticket_group.ticket_type":[1,3,4]}}]}}}}]}},"size":10,"from":0}

我想仅在ticket_type = 1时执行搜索individual_purchase = 1。 我该怎么写这个查询?

1 个答案:

答案 0 :(得分:1)

然后你可以这样做:

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "bool": {
            "must": [
              {
                "match": {
                  "ticket_group.ticket_type": 1
                }
              },
              {
                "match": {
                  "ticket_group.individual_purchase": 1
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "match": {
                  "ticket_group.ticket_type": 1
                }
              }
            ]
          }
        }
      ]
    }
  }
}

以上查询转换为:

  • ticket_type = 1individual_purchase = 1
  • ticket_type != 1