Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将两个elasticsearch响应组合为一个?_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java 如何将两个elasticsearch响应组合为一个?

Java 如何将两个elasticsearch响应组合为一个?,java,elasticsearch,Java,elasticsearch,我目前一直在使用一个多搜索的结果响应,它为我添加的每个查询返回一个响应数组,但我需要将响应组合起来,以便相关性可以确定它们的顺序。返回两个单独的点击列表对于创建统一的搜索结果页面来说并不好 我当前的搜索代码是: SearchRequestBuilder srb1 = client.prepareSearch(index) .setSearchType(SearchType.QUERY_THEN_FETCH) .setQuery(Query

我目前一直在使用一个多搜索的结果响应,它为我添加的每个查询返回一个响应数组,但我需要将响应组合起来,以便相关性可以确定它们的顺序。返回两个单独的点击列表对于创建统一的搜索结果页面来说并不好

我当前的搜索代码是:

SearchRequestBuilder srb1 = client.prepareSearch(index)                     
    .setSearchType(SearchType.QUERY_THEN_FETCH)
    .setQuery(QueryBuilders.queryString(query).field("body").field("title").field("author")
    .addHighlightedField("body").addHighlightedField("title").addHighlightedField("author")
    .setHighlighterPreTags("<div class='highlight'>").setHighlighterPostTags("</div>");

SearchRequestBuilder srb2 = client.prepareSearch(index2)                    
    .setSearchType(SearchType.QUERY_THEN_FETCH)
    .setQuery(
        QueryBuilders.queryString(query)
        .field("file")
        .field("title")
        .field("author")
    )
    .addHighlightedField("file").addHighlightedField("title").addHighlightedField("author")
    .setHighlighterPreTags("<div class='highlight'>").setHighlighterPostTags("</div>");

MultiSearchResponse sr = client.prepareMultiSearch()
    .add(srb1)
    .add(srb2)
    .execute().actionGet();
SearchRequestBuilder srb1=client.prepareSearch(索引)
.setSearchType(SearchType.QUERY\u然后\u FETCH)
.setQuery(QueryBuilders.queryString(query).field(“body”).field(“title”).field(“作者”)
.addHighlightedField(“正文”).addHighlightedField(“标题”).addHighlightedField(“作者”)
.setHighlighterPostTags(“”)。setHighlighterPostTags(“”);
SearchRequestBuilder srb2=client.prepareSearch(index2)
.setSearchType(SearchType.QUERY\u然后\u FETCH)
.setQuery(
QueryBuilders.queryString(查询)
.field(“文件”)
.字段(“标题”)
.field(“作者”)
)
.addHighlightedField(“文件”).addHighlightedField(“标题”).addHighlightedField(“作者”)
.setHighlighterPostTags(“”)。setHighlighterPostTags(“”);
MultiSearchResponse sr=client.prepareMultiSearch()
.add(srb1)
.add(srb2)
.execute().actionGet();
谢谢你们所有人能给予的帮助!
编辑: 这是我的最终代码

SearchRequestBuilder srb = client
                            .prepareSearch(index,index2)    
                            .setSearchType(SearchType.QUERY_AND_FETCH)
                            .setQuery(
                                QueryBuilders.boolQuery()
                                .should(
                                    QueryBuilders.queryString(query)
                                    .field("body")
                                    .field("title")
                                    .field("author")
                                )
                                .should(
                                    QueryBuilders.queryString(query)
                                    .field("file")
                                    .field("title")
                                    .field("author")
                                )
                                .minimumNumberShouldMatch(1)
                            )
                            .addHighlightedField("title")
                            .addHighlightedField("author")
                            .addHighlightedField("body")    
                            .addHighlightedField("file")
                            .setHighlighterPreTags("<div class='highlight'>")
                            .setHighlighterPostTags("</div>");                  
SearchResponse sr = srb.execute().actionGet();
SearchRequestBuilder srb=客户端
.prepareSearch(索引,index2)
.setSearchType(SearchType.QUERY_和_FETCH)
.setQuery(
boolQuery()文件
.应该(
QueryBuilders.queryString(查询)
.字段(“正文”)
.字段(“标题”)
.field(“作者”)
)
.应该(
QueryBuilders.queryString(查询)
.field(“文件”)
.字段(“标题”)
.field(“作者”)
)
.MinimumNumbers应匹配(1)
)
.addHighlightedField(“标题”)
.addHighlightedField(“作者”)
.addHighlightedField(“正文”)
.addHighlightedField(“文件”)
.setHighlighterPreTags(“”)
.setHighlighterPostTags(“”);
SearchResponse sr=srb.execute().actionGet();

我不使用多搜索,而是使用布尔查询:

Bool查询

一种查询,用于匹配与其他属性的布尔组合相匹配的文档 bool查询映射到Lucene BooleanQuery。它是使用 一个或多个布尔子句,每个子句都有一个类型化的引用 事件类型包括:

必须

子句(查询)必须出现在匹配的文档中

应该

子句(查询)应出现在匹配的文档中 布尔查询,不包含must子句,一个或多个should 子句必须与文档匹配。应包含的最小子句数 可以使用最小\u应\u匹配参数设置匹配

不得

子句(查询)不得出现在匹配的文档中

在您的情况下,我将使用一个should子句组合您的两个查询。类似于:

QueryBuilder qb = QueryBuilders
                    .boolQuery()
                    .should(termQuery("yourfield", "query1"))
                    .should(termQuery("yourfield", "query2"));

那么tat将如何处理不同的突出显示字段?以及两个不同的索引?在您的问题中,我没有看到关于两个不同索引的任何内容,但java api支持一次搜索多个索引:对不起,我只是编辑了我的代码以使其更清楚。我不知道如何使用两个单独的索引(也有不同的结构)我可以查询并突出显示?