Запрос одного значения с одним из коллекции в NEST - PullRequest
0 голосов
/ 07 октября 2019

Внутри экземпляра ElasticSearch я пытался искать элементы, сопоставляя одно поле с несколькими значениями. т.е.:

public class User
{
  public int Id { get; set; }
  public string Name { get; set; }
  public string Surname { get; set;}
}

Если у меня несколько пользователей и я хочу фильтровать по тем, кого зовут Джон или Майк, до версии 6.x эта реализация работала:

    private QueryContainer ApplyNameFilter(QueryContainerDescriptor<User> q, SearchParameters searchParameters)
    {
        return (searchParameters.Names != null && searchParameters.Names .Any()) ?
             q.Terms(z => z.Field(f => f.Name).Terms(searchParameters.Names))
             :
             q;
    }

Обратите внимание, что внутри SearchParameters, Names является IEnumerable

Как только я обновил экземпляр ElasticSearch до 7.x, а также библиотеку NEST до 7.3.1, этот фильтр больше не работает.

Обращаясь к документации Поиск NEST Я не совсем уверен, что мне нужно там сделать, чтобы заставить ее работать снова.

Может ли кто-нибудь мне помочь?

Заранее спасибо

1 Ответ

1 голос
/ 07 октября 2019

Term поле используется для соответствия тексту not_analyzed (текст не разбит на токены). Проверьте отображение поля «Имя», оно будет иметь ключевое слово подполя с типом: «ключевое слово», или вам нужно будет создать его в отображении

, вы можете попробовать выполнить запрос ниже q.Terms (z => z. Поле (f => f.Name.Suffix ("ключевое слово")). Условия (searchParameters.Names))

...