java - Elasticsearch : Combining multiple search results

标签 java search elasticsearch

我有一个棘手的案例,我不知道如何解决。

我有 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/

相关文章:

asp.net-mvc - 存储库中的多个搜索条件

java - 具有 ElasticSearch Reactive Streams 的 Spring Boot 应用程序的架构

mkstemp 的 java 等价物

java - 将 Oracle Date 映射到 Java 类型以返回自纪元以来的秒数?

java - 由插件定义的 JAXB 编码/解码对象

c# - 添加自定义分析器时,CompletionSuggester停止工作。 NEST C#

Elasticsearch - 从 6.7 升级到 7.0 后此搜索未返回正确结果

java - 使用 Spring JPA 的多数据源

java - 在 JTable 中查找并选择

grails - 在独立的gsp View 中显示grails错误消息