【问题标题】:ElasticSearch and Nest filtering does not workElasticSearch 和 Nest 过滤不起作用
【发布时间】:2013-07-06 14:30:04
【问题描述】:

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

我的代码有什么问题?

【问题讨论】:

  • 嗨 Araf 我也在邮件列表中回答了这个问题,是否解决了问题?
  • 是的,Martijn 非常感谢

标签: c# elasticsearch filter nest


【解决方案1】:

从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2015-01-05
    • 2016-10-26
    • 1970-01-01
    相关资源
    最近更新 更多