有什么方法可以在搜索结果的末尾附加不匹配的文档?
我一直在一个项目中,我们需要按地理位置数据搜索文档,但有些文档没有可用的地理位置数据。结果,这些文档未返回搜索结果。
有什么方法可以在搜索结果的末尾附加不匹配的文档?
映射示例:
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/