我想问你,如果有一种方法可以过滤ElasticSearch中的SearchRequestBuilder srb。 我有一个由公司组成的索引。每家公司都有一份英文文档,并且可能有其他语言的文档。所以我想把所有有文件的公司从用户语言中选出来,如果这家公司没有这种语言的文件给我带来英文。过滤来自ElasticSearch的响应数据
有没有办法做到这一点? 预先感谢您。
我想问你,如果有一种方法可以过滤ElasticSearch中的SearchRequestBuilder srb。 我有一个由公司组成的索引。每家公司都有一份英文文档,并且可能有其他语言的文档。所以我想把所有有文件的公司从用户语言中选出来,如果这家公司没有这种语言的文件给我带来英文。过滤来自ElasticSearch的响应数据
有没有办法做到这一点? 预先感谢您。
回答更新以返回所有使用滚动API的公司。
QueryBuilder qb = termQuery("Document", "English");
SearchResponse scrollResp = client.prepareSearch(test)
.addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)
.setScroll(new TimeValue(60000))
.setQuery(qb)
.setSize(100).execute().actionGet(); //max of 100 hits will be returned for each scroll
//Scroll until no hits are returned
do {
for (SearchHit hit : scrollResp.getHits().getHits()) {
//Handle the hit...
}
scrollResp =client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new
TimeValue(60000)).execute().actionGet();
}
while(scrollResp.getHits().getHits().length != 0);
// Zero hit mark the end of the scroll and the while loop.
如果没有找到其他语言的文档,您可以使用if块来返回具有英文文档的公司。
像这样的事情
if(SearchResponse1 == null) //searchResponse for Non english language
{
(Search for documents in English)
}
希望这有助于
如果我设置setSize(1),我会带1个公司,但我想带所有公司。第二个是,我如何在一个SearchResponse中合并? –
您可以使用滚动API来获取所有公司。请参阅更新后的答案。不确定您的意思是“合并到一个SerachResponse中” – Dungeon
保存在公司列表中的文件?或者他们是否通过某些ID将与公司有关的文件分开? – Joanna