使用 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))
在 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))