我有一个棘手的案例,我不知道如何解决。
我有 2 个查询:q1 和 q2 2 个查询结果为 r1 和 r2
每个结果都按特殊顺序排序。
作为整体搜索结果,我希望在将 r1+r2 返回到应用程序之前返回 r1+r2 的串联。
原因是如果我稍后再这样做,我会破坏分页。
有什么想法吗?这可能是一个简单的问题,但我被困在这个问题上......
PS:
我们还尝试了首先按主要排序标准排序,然后按分数排序。但分数总是违反第一个排序标准,不知怎的,我们无法让分数仅在其存储桶内工作。
最佳答案
您可以用一个因子来提升水果,这样它们的分数将始终高于蔬菜分数,但仍保持顺序。您可以通过简单的 weight
function score query 来做到这一点
PUT /test
POST /test/fruits/1
{
"field": "hello world"
}
POST /test/fruits/2
{
"field":"hello"
}
POST /test/veges/1
{
"field": "hello world"
}
POST /test/veges/2
{
"field":"hello"
}
POST /test/_search
{
"query": {
"function_score": {
"query": {
"match": {
"field": "hello"
}
},
"functions": [
{
"filter": {
"type": {
"value": "fruits"
}
},
"weight": 2
}
]
}
}
}
但是请注意,如果您在大型数据库上执行此操作,那么向下分页到第一个蔬菜将非常消耗资源。我会考虑重建您的用户体验,以便水果和蔬菜实际上是单独的请求。您可以使用 _bulk 端点来实现这一点,并在一个服务器 API 调用中为每个文档类型发送两个单独的查询,然后返回两个结果。
关于java - Elasticsearch : Combining multiple search results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31047173/