Elasticsearch geo_distance与其他查询结合使用

时间:2017-03-08 10:03:37

标签: elasticsearch

您好Elasticsearch中的多个查询组合存在问题。

每当我尝试将multi_match querygeo_distance query合并时,问题就会出现。当geo_distance query不存在时,multi_match查询有效,而当geo_distance query不存在时multi_match query有效。

每当我执行multi_match query而没有geo_distance query时,我会得到我期望的结果。当我在没有geo_distance query的情况下尝试multi_match query时,我也会得到预期的结果。

两个结果都包含在两个查询一起执行时我希望收到的数据集。但每当我一起执行它们时,我会得到0个结果。

当我将geo_distance query与简单term query合并后,搜索就可以了。所以我认为这是查询组合的问题。

我很感激任何想法。

我的查询如下:

{
  "query": {
    "bool": {
      "must": {
        "bool": {
          "should": {
            "multi_match": {
              "query": "CompanyName GmbH",
              "fields": [
                "originalName",
                "legalName"
              ],
              "type": "cross_fields",
              "operator": "AND"
            }
          }
        }
      },
      "filter": {
        "bool": {
          "should": {
            "geo_distance": {
              "location": [
                9.87107,
                51.69915
              ],
              "distance": "30.0km",
              "distance_type": "arc"
            }
          }
        }
      }
    }
  }
}

所有这些背后的映射是:

{
  "customer": {
    "aliases": {

    },
    "mappings": {
      "customer-entity": {
        "properties": {
          "communication": {
            "properties": {
              "domain": {
                "type": "string"
              },
              "email": {
                "type": "string"
              },
              "landline": {
                "type": "string"
              },
              "mobile": {
                "type": "string"
              }
            }
          },
          "id": {
            "type": "long"
          },
          "legalName": {
            "type": "string",
            "store": true
          },
          "location": {
            "type": "geo_point"
          },
          "operatingModes": {
            "type": "string"
          },
          "originalName": {
            "type": "string",
            "store": true
          }
        }
      },
      "homepage-entity": {
        "_parent": {
          "type": "customer-entity"
        },
        "_routing": {
          "required": true
        },
        "properties": {
          "customerId": {
            "type": "string",
            "store": true
          },
          "id": {
            "type": "long"
          },
          "metas": {
            "type": "string",
            "store": true
          }
        }
      },
      "person-entity": {
        "_parent": {
          "type": "customer-entity"
        },
        "_routing": {
          "required": true
        },
        "properties": {
          "customerId": {
            "type": "string",
            "store": true
          },
          "firstName": {
            "type": "string",
            "store": true
          },
          "id": {
            "type": "long"
          },
          "lastName": {
            "type": "string",
            "store": true
          },
          "personId": {
            "type": "string",
            "store": true
          }
        }
      }
    },
    "settings": {
      "index": {
        "refresh_interval": "-1",
        "number_of_shards": "1",
        "creation_date": "1488920698118",
        "store": {
          "type": "fs"
        },
        "number_of_replicas": "0",
        "uuid": "ZcLN5sxASXGUnKZMg8mBpw",
        "version": {
          "created": "2040499"
        }
      }
    },
    "warmers": {

    }
  }
}

0 个答案:

没有答案