簡體   English   中英

如何使用帶有列表作為參數的java api在elasticsearch上進行搜索

[英]How to do search on elasticsearch using java api with a list as parameter

我正在嘗試從 java api 在 elasticsearch 集群中運行查詢; 我有一個字符串值列表,我想獲取包含這些字符串值中的任何一個的所有文檔。 我該怎么做? 我嘗試了以下但沒有奏效。

List<String> tagList = new ArrayList<String>();
tagList.add("grails");
tagList.add("elasticSearch");
tagList.add("java");
SearchResponse response = client.prepareSearch("mongoindex")
    .setSearchType(SearchType.QUERY_AND_FETCH)
    .setQuery(fieldQuery("tags", tagList))
    .setFrom(0).setSize(60).setExplain(true)
    .execute()
    .actionGet();

試試這個:

List<String> tagList = new ArrayList<String>();
tagList.add("grails");
tagList.add("elasticSearch");
tagList.add("java");
SearchResponse response = client.prepareSearch("mongoindex")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(QueryBuilders.termsQuery("tags", tagList))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();

檢查此鏈接以查看有關術語查詢的更多詳細信息。

已經晚了,但也許可以幫助別人。 您可以使用帶有should子句的bool query來構建terms query

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
                .should(QueryBuilders.termsQuery("tags", tagList));

之后,像往常一樣繼續,假設存在一個保存這些值的字段tags

SearchResponse response = client.prepareSearch("mongoindex")
    .setSearchType(SearchType.QUERY_AND_FETCH)
    .setQuery(boolQuery)
    .setFrom(0).setSize(60).setExplain(true)
    .execute()
    .actionGet();

為了您的目的,您需要使用單獨的術語創建查詢,以便它至少搜索一個匹配項。 像這樣的東西

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
tagList.forEach(tag-> boolQuery.should(QueryBuilders.termQuery("tags", tag));
boolQuery.minimumShouldMatch(1);

然后在您的搜索中使用它。

“minimumShouldMatch”是為了確保匹配文檔中至少存在一個標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM