【问题标题】:ElasticSearch query using Nest - Match Field to one of a few options使用 Nest 进行 ElasticSearch 查询 - 将字段匹配到几个选项之一
【发布时间】:2021-06-27 11:20:20
【问题描述】:

我有一个带有关键字“user_id”字段的弹性索引。 我想获取属于一组用户的所有文档。

{
...,
"user_id": "031aeda2-b552-4a16-9ae6-68a24492e252",
...,
}

我想获取属于一个或多个 user_id 的文档,即 - 获取具有 user_id 的文档: “031aeda2-b552-4a16-9ae6-68a24492e252” 要么 “031fffa2-c552-4a16-9ae6-68a24492e141” 要么 ...

如何在 Nest 上做到这一点?

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    由于标准分析器提供基于语法的标记化,它会在 hypen 上拆分您的文本,因此请在关键字字段上使用

    Nest 有两种语法

    Fluent 和对象初始化器

    上面使用流畅的语法可以使用Terms查询来解决。

    _elasticClient                
     .Search<Users>(s => s
     .From(0).Size(10)
     .Query(q => q.Terms(p => p.Field(c => c.user_id.Suffix("keyword"))
                                            .Terms(new List<string> { "1" }))));
    
    

    *用你的模型替换用户。

    如果需要动态创建查询,可以使用 NEST 的对象初始化语法

    【讨论】:

    • 也许是一个愚蠢的问题,因为我是 Nest 新手——我能以某种方式在 foreach 循环中做应该部分吗?我的搜索值以动态列表的形式出现
    • @DaniToker 我已经更新了答案。对于您的问题,条款查询将起作用。如果搜索字段不同,则应该需要
    • 好像不行,尝试了完全相同的查询(暂时没有 from 和 size),但没有产生任何结果
    • @DaniToker 错误是什么?。您是否将 User 替换为您的模型,并将“term1”、“term2”替换为您的值
    • 已修复!这是解决方案,此外还必须添加关键字后缀 - 然后它就起作用了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多