【问题标题】:Elasticsearch more than one should, must and combinedElasticsearch 不止一个应该、必须和组合
【发布时间】:2018-11-29 08:53:56
【问题描述】:

我正在学习 Elasticsearch,但我不知道应该如何组合以及必须如何组合。我需要一个具有某个值的字段和另一个具有多个值的字段,这种情况可以重复多次。例如,

(Field1 == 1 and (Field2 == "a" or Field2 == "b" )) or
(Field1 == 2 and (Field2 == "c" or Field2 == "d" )) or
(Field1 == 3 and (Field2 == "a" or Field2 == "c" )) .... etc

我尝试了很多方法,但我不能使用 bool,必须在同一级别。例如,

{
    "query": {
        "bool": {
            "should": [
                {
                    "bool": {
                        "must":  [
                                { "term": { "Field1": 1 } },
                                {
                                    "bool": {
                                        "should": [
                                            { "terms": { "Field2" : [ "a", "b" ] } }
                                        ]
                                    }
                                }
                        ]
                    },
                    "bool": {
                        "must": [
                                { "term": { "Field1": 2 } },
                                {
                                    "bool": {
                                        "should": [
                                            { "terms": { "Field2" : [ "c", "d" ] } }
                                        ]
                                    }
                                }
                        ]
                    },
                    "bool": {
                        "must": [
                                { "term": { "Field1": 2 } },
                                {
                                    "bool": {
                                        "should": [
                                            { "terms": { "Field2" : [ "a", "c" ] } }
                                        ]
                                    }
                                }
                        ]
                    }
                }
            ]
        }
    }
}

我真的需要 NEST,但我想从这个开始。

【问题讨论】:

标签: elasticsearch nest


【解决方案1】:

你可以这样做:

{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "should": [
              {
                "bool": {
                  "must": [
                    {
                      "term": {
                        "field1": 1
                      }
                    },
                    {
                      "terms": {
                        "field2": [
                          "a",
                          "b"
                        ]
                      }
                    }
                  ]
                }
              },
              {
                "bool": {
                  "must": [
                    {
                      "term": {
                        "field1": 2
                      }
                    },
                    {
                      "terms": {
                        "field2": [
                          "c",
                          "d"
                        ]
                      }
                    }
                  ]
                }
              },
              {
                "bool": {
                  "must": [
                    {
                      "term": {
                        "field1": 3
                      }
                    },
                    {
                      "terms": {
                        "field2": [
                          "a",
                          "c"
                        ]
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

如果您想要a OR b OR c 其中abc 代表任何类型的查询,那么这在弹性查询中表示为:

{
  "bool": {
    "should": [
      {
        a
      },
      {
        b
      },
      {
        c
      }
    ]
  }
}

用精确查询替换 abc

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 2014-02-05
    • 2016-11-02
    • 2020-07-31
    • 1970-01-01
    • 2019-06-10
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多