我运行一个返回10个结果的查询。我的文档中有一个名为Type的属性。某些记录的此属性值为空字符串,其他一些记录的值为“AudioAlbum”或“AudioRington”。
我想做两件事:1-从搜索结果中排除其Type属性没有值的文档。 2-仅获取AudioAlbums(作为不同的搜索)。
我获取AudioAlbums的搜索代码是:
var docs = client.Search<content>(
b => b.Type("content")
.Query(q => q.Fuzzy(fz => fz
.OnField("title").Value(keyWord)
.OnField("artists.name")))
.Filter(x => x.Term("type", "AudioRingtone")))
.Documents.ToList();
如果没有Filter扩展方法,我会得到10条记录(包括两条AudioAlbums)。当我添加.Filter方法时,我得到零记录。
另外,我想排除Type属性没有值的记录。我的代码(下面给出)再次没有记录任何结果:
BaseFilter notFilter = Filter.Not(x => Filter.Term("Type", string.Empty));
var docs = client.Search<content>(
b =>
b.Type("content")
.Query(q => q.Fuzzy(fz =>fz.OnField("title")
.Value(keyWord)
.OnField("artists.name")))
.Filter(notFilter)).Documents.ToList();
我的代码出了什么问题?
答案 0 :(得分:5)
从弹性搜索用户列表中复制粘贴的答案
在你的第一个例子中,你过滤了“type”字段,而在第二个“Type”上,我想你需要将第一个更改为“Type”。
根据您对“类型”字段的分析,您可能还需要小写“AudioRingtone”。
在第二个示例中,您使用了错误的查询:
http://www.elasticsearch.org/guide/reference/query-dsl/missing-filter/
你可以在NEST中做到这一点:
如果你发出一个空的术语过滤器/查询,你会点击NEST无条件查询logica,而nest实际上根本不会发送过滤器。
使用查询dsl。
查看http://nest.azurewebsites.net/nest/writing-queries.html以获取帮助