проверить значение поля со списком значений в запросе Elasti c - PullRequest
0 голосов
/ 11 февраля 2020

Я ищу что-то вроде "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));

, он возвращает ноль в качестве ответа! Есть ли способ получить запрос для моей цели?

1 Ответ

0 голосов
/ 11 февраля 2020

вы в основном хотите сопоставить несколько терминов с вашими данными, чтобы вы могли использовать запрос терминов для одного и того же.

GET <index_name>/_search
{
    "query" : {
        "terms" : {
            "messageThread" : ["messageThread1", "messageThread2"]
        }
    }
}

Вы можете использовать

//it can accept a collection
List<String> messageTgreads;
 QueryBuilders.termsQuery("messageThread", messageTgreads)

и в зависимости от клиент, которого вы используете, вы можете запустить запрос соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...