如何将地理距离过滤器与 bool term 查询合并

How to merge geo distance filter with bool term query

如何使用 Elasticsearch 1.6/1.7 版本的地理距离过滤器和这样的 bool term 查询。如何和这里两个合并这两个查询

原始查询:

{
  "query": {
        "bool": {
          "must": [
            {
              "term": {
                "categories": "tv"
              }
            }
          ],
          "should": [
            {
              "term": {
                "subCategory": "led"
              }
            }
          ],
          "minimum_should_match": 1,
          "boost": 2
        }
      }
    }

我想搜索距离为 10 英里的上述 bool 查询的产品

{
  "filtered": {
    "filter": {
      "geo_distance": {
        "distance": "10km",
        "sellerInfoES.address.sellerLocation": "28.628978,77.21971479999999"
      }
    }
  }
}

谢谢瓦尔!查询正常,我没有收到任何查询解析错误。但是,此地理查询未返回距离范围结果。我正在使用 Elasticsearch 1.6 并将 sellerLocation 存储为 geo_point.Mapping:

{
  "SellerInfoES": {
    "type": "nested",
    "properties": {
      "sellerLocation": {
        "type": "geo_point"
      }
    }
  }
}

这个geo_query没有用

{
  "geo_distance": {
    "distance": "100km",
    "sellerLocation": {
      "lat": 28.628978,
      "lon": 77.21971479999999
    }
  }
}

您可以像这样组合 query/filters:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "categories": "tv"
              }
            },
            {
              "nested": {
                 "path": "sellerInfoES",
                 "filter": {
                    "geo_distance": {
                       "distance": "10km",
                       "sellerInfoES.sellerLocation": {
                           "lat": "28.628978",
                           "lon":"77.21971479999999"
                       }
                    }
                 }
              }
            }
          ],
          "should": [
            {
              "term": {
                "subCategory": "led"
              }
            }
          ],
          "minimum_should_match": 1,
          "boost": 2
        }
      }
    }
  }
}