使用 NEST 中的集合之一查询单个值

Query one single value with one of a collection in NEST

在 ElasticSearch 实例中,我试图通过将一个字段与多个值匹配来搜索元素。即:

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

如果我有多个用户,并且我想按姓名为 John 或 Mike 的用户进行过滤,直到版本 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,这个过滤器就不再工作了。

查看 Search NEST documentation 我不完全确定我必须在那里重构什么才能使其再次工作。

谁能帮帮我?

提前致谢

Term 字段用于匹配 not_analyzed 文本(未在标记中分解的文本)。 检查字段 "Name" 的映射,它将有一个类型为:"keyword" 的子字段关键字,或者您需要在映射

中创建一个

您可以尝试以下查询 q.Terms(z => z.Field(f => f.Name.Suffix("keyword")).条款(searchParameters.Names))