ElasticSearch和Nest过滤不起作用

时间:2013-07-09 05:20:42

标签: c# elasticsearch filter nest

我运行一个返回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();

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:5)

从弹性搜索用户列表中复制粘贴的答案

在你的第一个例子中,你过滤了“type”字段,而在第二个“Type”上,我想你需要将第一个更改为“Type”。

根据您对“类型”字段的分析,您可能还需要小写“AudioRingtone”。

在第二个示例中,您使用了错误的查询:

http://www.elasticsearch.org/guide/reference/query-dsl/missing-filter/

你可以在NEST中做到这一点:

https://github.com/elasticsearch/elasticsearch-net/blob/master/src/Tests/Nest.Tests.Unit/Search/Filter/Singles/MissingFilterJson.cs

如果你发出一个空的术语过滤器/查询,你会点击NEST无条件查询logica,而nest实际上根本不会发送过滤器。

使用查询dsl。

查看http://nest.azurewebsites.net/nest/writing-queries.html以获取帮助