C# 使用嵌套中的集合之一查询单个值
在ElasticSearch实例中,我试图通过将一个字段与多个值匹配来搜索元素。即:C# 使用嵌套中的集合之一查询单个值,c#,
elasticsearch,.net-core,nest,C#,
elasticsearch,.net Core,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 Appl
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;
}
private QueryContainer ApplyNameFilter(QueryContainerDescriptor q,SearchParameters SearchParameters)
{
return(searchParameters.Names!=null&&searchParameters.Names.Any())?
q、 术语(z=>z.Field(f=>f.Name).Terms(searchParameters.Names))
:
Q
}
请注意,在SearchParameters中,名称是IEnumerable
一旦我将ElasticSearch实例更新为7.x,也将NEST library更新为7.3.1,这个过滤器就不再工作了
查看一下,我不完全确定为了使它再次工作,我必须在那里重构什么
有人能帮我吗
“提前感谢”字段用于匹配未分析的文本(未在标记中分解的文本)。
检查字段“Name”的映射,它将有一个类型为“keyword”的子字段关键字,或者您需要在映射中创建一个
你可以试试下面的查询
q、 Terms(z=>z.Field(f=>f.Name.Suffix(“关键字”)).Terms(searchParameters.Names))当您说“此筛选器不再工作”时,什么不工作?它是否引发异常?它是否生成了正确的查询?它不会返回预期的结果吗?使用这种方法,客户端不会检索任何结果,而事实上,如果有与要显示的筛选器匹配的数据。尝试上面@jaspreet chahal建议的解决方案对我有效,谢谢你们的帮助。它对我有效,我将进一步调查未分析的文本。非常感谢你的帮助:)很高兴能帮上忙