c# - 如何根据字符串数组的第一个元素从弹性搜索返回文档?
问题描述
我在弹性搜索中有如下文件:
[
{
_index: myindex,
name: John,
hobbies: Swimming, Golfing
},
{
_index: myindex,
name: Alice,
hobbies: Golfing, Swimming
},
{
_index: myindex,
name: Alice,
hobbies: Golfing
},
]
我需要一种方法来返回Hobbies
在爱好字段中列为第一个的所有文档。
我正在使用弹性搜索 NEST 库来解决这个问题。我创建了一个弹性搜索服务,用 C# 构建来创建我的查询。在此服务中,我查找所有用户并将过滤器应用于搜索。在这种情况下,我想获取所有Hobbies
列为Golfing
第一个的文件,如果Golfing
不是第一个爱好,那么我不想要这些文件。
模型:
public class User {
public const string Name {get; set;}
public List<string> Hobbies {get; set;}
}
我的查询:
query = query.Bool(b => b
.Filter(filter => filter
.Bool(b2 => b2
.Must(must => must
.Match(match => match
.Field(l => l.Hobbies.First() == "Golfing")
)
)
)
)
);
我想过滤文档,以便我只获取爱好首先列为高尔夫的文档。我的预期结果应该是:
[
{
_index: myindex,
name: Alice,
hobbies: Golfing, Swimming
},
{
_index: myindex,
name: Alice,
hobbies: Golfing
},
]
但是,它正在返回所有三个。我如何使它只返回文件,其爱好以打高尔夫球作为第一个爱好?
解决方案
我认为实现这一目标的唯一方法是使用脚本查询
在您的情况下,例如:
var response = client.Search(s => s
.Query(q => q
.Script(sq => sq
.Source("doc['hobbies'].value[0]. == 'Golfing'")
)
)
)
);
推荐阅读
- unit-testing - 如何在开玩笑的单元测试中使用导入的 graphql 文件?
- scala - Apache Spark SQL 中的安全向下转换
- javascript - 当referrer header设置为no-referrer时在IE11中播放html5视频
- php - Laravel: 试图生成 pdf -> sh: 1: wkhtmltopdf: not found - 我可以为 shell 注册 wkhtmltopdf 吗?
- c# - 并行 ForEach 不等待 HttpClient
- jfrog-cli - 通过 api 从 Jfrog 的 repo 中获取所有孩子的列表
- istio - 有没有办法设置多个 Istio 网关,每个网关都有相同的主机,但在不同的命名空间中?
- sql - Sql - 字母表中的哪个字母不在名称中
- logging - 当 Airflow 尝试写入日志时 Errno 13 权限被拒绝
- kubernetes - helm/go 模板中具有不同值的引用值键