Я ищу что-то вроде "in" команды SQL языка запросов, но в elasti c search query
Я написал что-то подобное, и я хочу знать, как передать список messageThreadIds вместо только указанного значения c!
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(QueryBuilders.queryStringQuery("messageThread:\"" + messageThreadId + "\""));
queryBuilder.must(QueryBuilders.queryStringQuery("isDeleted:false"));
queryBuilder.mustNot(QueryBuilders.queryStringQuery("excludedUsers:\"" + receiverUserId + "\""));
queryBuilder.mustNot(QueryBuilders.queryStringQuery("sender:\"" + receiverUserId + "\""));
if (sendTime != null) {
if (sendTimeNanos != null) {
queryBuilder.must(QueryBuilders.queryStringQuery(
"sendTime:>" + sendTime +
" OR (sendTime: " + sendTime + " AND sendTimeNanos:>" + sendTimeNanos + ")")
);
} else {
queryBuilder.must(QueryBuilders.queryStringQuery("sendTime:>" + sendTime));
}
}
SearchResponse response = transportClient.prepareSearch(ChatSettings.ELASTIC_MESSAGE_INDEX_NAME + "*")
.setTypes(ChatSettings.ELASTIC_DB_NAME)
.setSearchType(SearchType.DEFAULT)
.setQuery(queryBuilder)
.setFetchSource(new String[]{"id"}, null)
.addAggregation(AggregationBuilders.count("count").field("id"))
.setSize(1)
.setExplain(true)
.execute()
.actionGet();
checkResponse(response);
InternalValueCount count = response.getAggregations().get("count");
return response.getHits().getTotalHits() > 0 ? count.getValue() : null;
, например: для messageThreadId = 1020 он вернет 5 в качестве ответа, для messageThreadId = 1030 в этом состоянии нет ответа, поэтому я получил ноль, это правда. и для messageThreadId = 1040 он вернет 20 в качестве ответа и его истину. но я хочу запрос, что я отправил список messageThreadIds list [1020,1030,1040] и получил 25 в качестве ответа. но когда я изменяю запрос условия messageThreadId на queryBuilder.must (QueryBuilders.termsQuery ("messageThread", messageThreadIdList));
, он возвращает ноль в качестве ответа! Есть ли способ получить запрос для моей цели?