3

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

如果没有过滤器扩展方法,我会得到 10 条记录(包括两个音频专辑)。当我添加 .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();

我的代码有什么问题?

4

1 回答 1

5

从 elasticsearch 用户列表复制粘贴的答案

在您的第一个示例中,您过滤了“类型”字段,第二个过滤了“类型”,我想您需要将第一个更改为“类型”。

根据您对“类型”字段的分析,您可能还需要小写“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 无条件查询逻辑,并且 Nest 实际上甚至根本不会发送过滤器。

有关使用查询 dsl 的帮助,请参阅http://nest.azurewebsites.net/nest/writing-queries.html

于 2013-07-26T07:28:04.343 回答