【问题标题】:ElasticSearch combine conditional statements 'and' with 'or'ElasticSearch 将条件语句 'and' 与 'or' 组合
【发布时间】:2017-03-28 00:34:20
【问题描述】:

以下查询的目的是为每个条件返回 n 个结果,即它必须匹配合作伙伴站点 16 并匹配“venueTown”或合作伙伴站点 16 并匹配“venueName”。目前,它返回每个字段必须包含相同字符串的结果。在我的案例中,字段:name、venueName 和venueTown 必须包含 manchester,但我希望每一对 {(partnersites,venueName),(partnersites,venueTown)} 都有单独的结果。

    {
    "size": 0,
    "_source": ["groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "media"],
    "query": {
        "bool": {
            "must": [{
                "match": {
                    "partnersites": {
                        "query": "16"
                    }
                }
            }, {
                "match": {
                    "name": "manchester"
                }
            }, {
                "match": {
                    "venueName": "manchester"
                }
            }, {
                "match": {
                    "venueTown": "manchester"
                }
            }, {
                "match": {
                    "venueTown": "manchester"
                }
            }]
        }
    },
    "aggs": {
        "distinct_names": {
            "terms": {
                "field": "name.keyword",
                "size": 10
            },
            "aggs": {
                "top_tag_hits": {
                    "top_hits": {
                        "size": 1,
                        "_source": ["groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "media"]
                    }
                }
            }
        },
        "distinct_venues": {
            "terms": {
                "field": "venueName.keyword",
                "size": 10
            },
            "aggs": {
                "top_tag_hits": {
                    "top_hits": {
                        "size": 1,
                        "_source": ["groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "media"]
                    }
                }
            }
        },

        "distinct_towns": {
            "terms": {
                "field": "venueTown.keyword",
                "size": 10
            },
            "aggs": {
                "top_tag_hits": {
                    "top_hits": {
                        "size": 1,
                        "_source": ["groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "media"]
                    }
                }
            }
        }
    }
}

【问题讨论】:

    标签: json elasticsearch nest


    【解决方案1】:

    试试这个:

    {
      "size": 0,
      "query": {
        "bool": {
          "must": [
            {
              "bool": {
                "should": [
                  {
                    "bool": {
                      "must": [
                        {
                          "term": {
                            "partnersites": "16"
                          }
                        },
                        {
                          "match_phrase_prefix": {
                            "name": "mancheste"
                          }
                        }
                      ]
                    }
                  },
                  {
                    "bool": {
                      "must": [
                        {
                          "term": {
                            "partnersites": "16"
                          }
                        },
                        {
                          "match_phrase_prefix": {
                            "venueName": "mancheste"
                          }
                        }
                      ]
                    }
                  },
                  {
                    "bool": {
                      "must": [
                        {
                          "term": {
                            "partnersites": "16"
                          }
                        },
                        {
                          "match_phrase_prefix": {
                            "venueTown": "mancheste"
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            }
          ]
        }
      },
      "aggs": {
        "distinct_names": {
          "terms": {
            "field": "groupedName.keyword",
            "size": 30
          },
          "aggs": {
            "top_tag_hits": {
              "top_hits": {
                "size": 1,
                "_source": [
                  "groupedName",
                  "groupedDisplayName",
                  "groupedUrl",
                  "eventCode",
                  "venueName",
                  "venueTown",
                  "venueId",
                  "media"
                ]
              }
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多