Dans une instance ElasticSearch, j'essayais de rechercher des éléments en faisant correspondre un champ avec plusieurs valeurs. c'est à dire:

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

Si j'ai plusieurs utilisateurs et que je veux filtrer par ceux qui s'appellent John ou Mike, jusqu'à la version 6.x, cette implémentation fonctionnait :

    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;
    }

Notez qu'à l'intérieur de SearchParameters, Names est un IEnumerable

Une fois que j'ai mis à jour l'instance ElasticSearch vers 7.x, ainsi que la bibliothèque NEST vers 7.3.1, ce filtre ne fonctionne plus.

Consultez la Rechercher la documentation NEST Je ne suis pas tout à fait sûr de ce que je dois refactoriser pour que cela fonctionne à nouveau.

Quelqu'un pourrait-il m'aider?

Merci d'avance

0
Xelit3 7 oct. 2019 à 17:41

1 réponse

Meilleure réponse

Champ Terme est utilisé pour faire correspondre le texte not_analyzed (texte non divisé en jetons). Vérifiez le mappage du champ "Nom" il aura un mot-clé de sous-champ avec le type : "mot-clé" ou vous devrez en créer un dans le mappage

Vous pouvez essayer la requête ci-dessous q.Terms(z => z.Field(f => f.Name.Suffix("keyword")).Terms(searchParameters.Names))

1
jaspreet chahal 7 oct. 2019 à 15:05