Я до сих пор использую 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 можно использовать для проверки любого частичного текстового поиска в поле.
Я не получаю ожидаемых результатов.
Может ли кто-нибудь помочь мне здесь? Куда я иду не так?