elasticsearch - ElasticSearch在搜索结果的末尾附加不匹配的文档

标签 elasticsearch

有什么方法可以在搜索结果的末尾附加不匹配的文档?

我一直在一个项目中,我们需要按地理位置数据搜索文档,但有些文档没有可用的地理位置数据。结果,这些文档未返回搜索结果。

有什么方法可以在搜索结果的末尾附加不匹配的文档?

映射示例:

PUT /my_locations
{
    "mappings": {
        "_doc": {
            "properties": {
                "address": {
                    "properties": {
                        "city": {
                            "type": "text"
                        },
                        "location": {
                            "type": "geo_point"
                        }
                    }
                }
            }
        }
    }
}

具有地理位置的数据:
PUT /my_locations/_doc/1
{
    "address" : {
        "city: "XYZ",
        "location" : {
            "lat" : 40.12,
            "lon" : -71.34
        }
    }
}

没有地理位置的数据:
PUT /my_locations/_doc/2
{
    "address" : {
        "city: "ABC"
    }
}

有什么方法可以执行地理距离查询,即选择带有地理位置数据的文档,然后在结果的末尾附加非地理文档?

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-query.html#query-dsl-geo-distance-query

最佳答案

您有两个单独的查询

  • 获取
  • 区域内的文档
  • 获取其他文件

  • 要同时进行搜索,这意味着所有文档都将显示在一个结果中,并共享排名。创建一个关联模型很难获得前9个带地址的文档,而一个没有地址。

    但是您可以一次运行两个查询,一个查询,例如带有位置的前9个文档,一个查询,不带位置。

    例:
    GET my_locations/_msearch
    {}
    {"size":9,"query":{"geo_distance":{"distance":"200km","pin.location":{"lat":40,"lon":-70}}}}
    {}
    {"size":1,"query":{"bool":{"must_not":[{"exists":{"field":"pin.location"}}]}}}
    

    关于elasticsearch - ElasticSearch在搜索结果的末尾附加不匹配的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52380205/

    相关文章:

    elasticsearch - elasticsearch中查询DSL中的must和filter有什么区别?

    elasticsearch - Elasticsearch 到许多聚合:无法连接到服务器

    python - 同义词分析器无法在带有 python 的 Elasticsearch 中工作

    java - ElasticSearch in-memory 用于测试

    elasticsearch - 在Elasticsearch中将 “keyword”更新为索引的 “text”字段类型以进行不精确的单词匹配

    javascript - 如何从 Elasticsearch 查询/过滤器返回部分文档?

    elasticsearch - 在一个字段中匹配所有部分单词

    Elasticsearch - preIndex

    java - 如何在 spring 数据 elasticsearch 中将结果大小设置为零

    elasticsearch - 如何添加新分片和拆分索引内容