ElasticSearch NEST: запрос соответствия и условия внутри QueryContainer - PullRequest
0 голосов
/ 02 апреля 2020

Я до сих пор использую AzureSearch, и я новичок в ElasticSearch. Все еще исследую в этом огромном океане. Я хотел бы знать, как использовать несколько запросов (MatchQuery и TermsQuery) внутри QueryContainer. Это мой код:

private static QueryContainer CreateQueryUsingFilters(
            string searchTerm, List<string> searchFields,
            Dictionary<string, string> filters, ExpressionOperand operand)
        {
            QueryContainer queryContainer = null;
            foreach (var field in searchFields)
            {
                var matchQuery = new MatchQuery { Field = field, Query = searchTerm };
                if (queryContainer == null)
                    queryContainer = matchQuery;
                else
                    queryContainer = queryContainer || matchQuery;
            }
            if (filters == null || !filters.Any())
                return queryContainer;

            foreach (var filter in filters)
            {
                var termQuery = +new TermQuery() { Field = filter.Key, Value = filter.Value,  };
                queryContainer = operand == ExpressionOperand.And
                    ? queryContainer && termQuery
                    : queryContainer || termQuery;
            }

            return queryContainer;
        }

И я использую его вот так

var searchRequest = new SearchRequest(indexName) { From = skipCount, Size = takeCount };
searchRequest.Query = CreateQueryUsingFilters(searchTerm, searchFields, queryFilters, 
  operand);
var searchResponse = ElasticSearchClient.Search<T>(searchRequest);

Насколько я понимаю, а) TermsQuery можно использовать для фильтрации документов из индекса на основе различных полей и соответствует точному значению в указанных полях. b) MatchQuery можно использовать для проверки любого частичного текстового поиска в поле.

Я не получаю ожидаемых результатов.

Может ли кто-нибудь помочь мне здесь? Куда я иду не так?

...