查询文档并根据嵌套字符串列表(即标签)中的特定值进行过滤

约格·巴特曼

关于相对简单的文档结构,NEST及其查询和过滤器语法存在一些问题。

给定一个文档类型“ BlogPosts”,如下所示:

public class BlogPosts
{
    public Guid Id { get; set; }
    public Guid UserId { get; set; }
    public DateTime CreatedAt { get; set; }
    public string Content { get; set; }

    public List<string> Tags { get; set; }
    public List<Guid> ReferencedUserIds { get; set; }
}

我可以将实例发送到我的ES实例,并将它们索引好,即,已发送/索引的json如下所示:

 {
  "id": "ad61de92-c6f6-49c1-84eb-0a4dfdf86cc0",
  "userId": "c43e1be7-0b8c-4271-bf29-7434719fbcbf",
  "createdAt": "2015-04-05T11:23:58.1017261Z",
  "content": "Some Specific Word in here",
  "tags": [
    "Some",
    "Tag",
    "SomeSpecialTag"
  ],
  "referencedUserIds": [
    "f6a714a0-318d-49d7-9940-f0480c002577",
    "e582c24c-1c82-43f8-8e80-09e19749a0a3",
    "11165e0b-8e4f-466a-8c37-e0cfec81850c"
  ]
}

现在使用NEST,我可以轻松地使用“ SomeSpecialTag”标签查询所有BlogPost,如下所示:

var postsQueriedForSpecialTag = elasticClient.Search<BlogPosts>(postSearch => postSearch
                .Index(indexName)
                .Query(
                    queryDescriptor => queryDescriptor.Match(match => match.OnField(posts => posts.Tags).Query("SpecialTag"))));

..但我真正想要的是

a)查询特定内容和

b)根据特定标签(也可以根据特定UserId)进行过滤

但是即返回0个文档:

var postsFilteredForSpecialTag = elasticClient.Search<BlogPosts>(postSearch => postSearch
    .Index(indexName)
    .Query(
        queryDescriptor => queryDescriptor.QueryString(q => q.Query("Some Specific Word")))
        .Filter(descriptor => descriptor.Nested(filterDescriptor => filterDescriptor.Path(posts => posts.Tags).Filter(descriptor1 => descriptor1.Term(posts => posts.Tags, "SpecialTag")))));

..我不知道为什么。更确切地说,List<string or Guid>如上所述,要对嵌套结构进行过滤的正确NEST语法是什么?

*更新:

遵循Jettro的提示并改为使用“应该”过滤器(请参阅https://stackoverflow.com/a/28001971/2591),它现在可以正常工作。现在,最终查询+过滤器代码如下所示:

var postsFilteredForSpecialTag = elasticClient.Search<BlogPosts>(postSearch => postSearch
                .Index(indexName)
                .Query(
                    queryDescriptor => queryDescriptor.QueryString(q => q.Query("Some Specific Word")))
                    .Filter(descriptor => descriptor.Bool(filterDescriptor => filterDescriptor.Should(descriptor1 => descriptor1.Term(posts => posts.Tags, "specialtag")))));
Jettro Coenradie

这可能是您映射中的问题。尽管我不是NEST专家,但这可能是一个普遍的问题。可能默认的过滤器是术语过滤器?如果未指定标签字段的映射,则为标准分析仪。使用该分析器,将删除大写字符。进行查询将具有相同的效果,但是将不分析术语过滤器,因此将找不到带有大写字母“ SpecialTag”的术语。将其更改为“特殊标签”,然后重试或在映射中将字段设置为not_analyzed。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据字符串列表过滤列值

来自分类Dev

根据特定字段对字符串列表进行排序

来自分类Dev

根据特定字段对字符串列表进行排序

来自分类Dev

根据Pandas中的字符串列表过滤出行

来自分类Dev

根据java中的double值对字符串列表进行排序

来自分类Dev

根据给定映射中字符串的值对字符串列表进行排序

来自分类Dev

在python中过滤字符串列表

来自分类Dev

如何通过嵌套列表过滤字符串列表?

来自分类Dev

字词根据not_analysed字符串列表进行过滤

来自分类Dev

根据字符串中的数字对字符串列表进行排序

来自分类Dev

根据字符串列表过滤/删除项目

来自分类Dev

根据内容过滤字符串列表时出错 - python

来自分类Dev

Javascript是根据数组中的字符串列表过滤对象的最佳方法是什么?

来自分类Dev

在迭代字符串列表以在Python的字符串列表中查找匹配项时搜索特定值

来自分类Dev

按出现频率对(嵌套的)字符串列表进行排序

来自分类Dev

根据数字对混合字符串列表进行排序

来自分类Dev

根据多个谓词对字符串列表进行排序

来自分类Dev

根据时区字符串列表中的GMT时间对TimeZone进行排序

来自分类Dev

根据时区字符串列表中的GMT时间对TimeZone进行排序

来自分类Dev

根据特定单词拆分字符串列表

来自分类Dev

根据字符串中的特定值进行排序。

来自分类Dev

使用字符串列表作为键来更新嵌套JSON文件中的单个值

来自分类Dev

python pandas - 根据包含字符串列表的 B 列更改 A 列中的值

来自分类Dev

按map值对字符串列表进行排序

来自分类Dev

如何过滤字符串列表中的关键字?

来自分类Dev

在python中展平嵌套的字符串列表

来自分类Dev

如何对数据帧行进行分组并针对字符串列表中的所有匹配项进行过滤?

来自分类Dev

python:根据字符串名称过滤字符串列表

来自分类Dev

根据字符串列表绑定到模板中的模型

Related 相关文章

  1. 1

    如何根据字符串列表过滤列值

  2. 2

    根据特定字段对字符串列表进行排序

  3. 3

    根据特定字段对字符串列表进行排序

  4. 4

    根据Pandas中的字符串列表过滤出行

  5. 5

    根据java中的double值对字符串列表进行排序

  6. 6

    根据给定映射中字符串的值对字符串列表进行排序

  7. 7

    在python中过滤字符串列表

  8. 8

    如何通过嵌套列表过滤字符串列表?

  9. 9

    字词根据not_analysed字符串列表进行过滤

  10. 10

    根据字符串中的数字对字符串列表进行排序

  11. 11

    根据字符串列表过滤/删除项目

  12. 12

    根据内容过滤字符串列表时出错 - python

  13. 13

    Javascript是根据数组中的字符串列表过滤对象的最佳方法是什么?

  14. 14

    在迭代字符串列表以在Python的字符串列表中查找匹配项时搜索特定值

  15. 15

    按出现频率对(嵌套的)字符串列表进行排序

  16. 16

    根据数字对混合字符串列表进行排序

  17. 17

    根据多个谓词对字符串列表进行排序

  18. 18

    根据时区字符串列表中的GMT时间对TimeZone进行排序

  19. 19

    根据时区字符串列表中的GMT时间对TimeZone进行排序

  20. 20

    根据特定单词拆分字符串列表

  21. 21

    根据字符串中的特定值进行排序。

  22. 22

    使用字符串列表作为键来更新嵌套JSON文件中的单个值

  23. 23

    python pandas - 根据包含字符串列表的 B 列更改 A 列中的值

  24. 24

    按map值对字符串列表进行排序

  25. 25

    如何过滤字符串列表中的关键字?

  26. 26

    在python中展平嵌套的字符串列表

  27. 27

    如何对数据帧行进行分组并针对字符串列表中的所有匹配项进行过滤?

  28. 28

    python:根据字符串名称过滤字符串列表

  29. 29

    根据字符串列表绑定到模板中的模型

热门标签

归档