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支持一次搜索多个索引:对不起,我只是编辑了我的代码以使其更清楚。我不知道如何使用两个单独的索引(也有不同的结构)我可以查询并突出显示?