使用 C# Nest 查询 ElasticSearch
Querying ElasticSearch with C# Nest
有一个 ElasticSearch 索引,其中潜在的命中是这样构建的:
id: number,
source: string,
type: string,
organization: {
main: [string],
support: [string]
},
title: {
main: [string],
sub: [string]
}
我的问题是无法搜索 [] 中的元素。
这样做没问题:
var searchResults = client.Search<Document>(s => s
.Index(****)
.Type(****)
.MatchAll()
.Query(q =>
q.Term(p => p.source, "some source name")
))
但是这个不行:
var searchResults = client.Search<Document>(s => s
.Index(****)
.Type(****)
.MatchAll()
.Query(q =>
q.Term(p => p.organization.main[0], "some organization name")
))
我也试过这个版本,还是不行:
var searchResults = client.Search<Document>(s => s
.Index(****)
.Type(****)
.MatchAll()
.Query(q =>
q.Term(p => p.organization.main, "some organization name")
))
谁能找出问题所在?
您可以使用 LINQ 的 .First()
扩展方法来引用 Elasticsearch 中的 "organization.main"
字段
var searchResults = client.Search<Document>(s => s
.Index(****)
.Type(****)
.MatchAll()
.Query(q =>
q.Term(p => p.organization.main.First(), "some organization name")
)
);
请记住,您的查询是在此处对整个数组进行操作,而不是 organization.main
中的第一项,因为 .First()
的用法可能暗示了这一点。数组被索引为无序的多值字段。然而,他们回来时订购了 _source
。
有一个 ElasticSearch 索引,其中潜在的命中是这样构建的:
id: number,
source: string,
type: string,
organization: {
main: [string],
support: [string]
},
title: {
main: [string],
sub: [string]
}
我的问题是无法搜索 [] 中的元素。
这样做没问题:
var searchResults = client.Search<Document>(s => s
.Index(****)
.Type(****)
.MatchAll()
.Query(q =>
q.Term(p => p.source, "some source name")
))
但是这个不行:
var searchResults = client.Search<Document>(s => s
.Index(****)
.Type(****)
.MatchAll()
.Query(q =>
q.Term(p => p.organization.main[0], "some organization name")
))
我也试过这个版本,还是不行:
var searchResults = client.Search<Document>(s => s
.Index(****)
.Type(****)
.MatchAll()
.Query(q =>
q.Term(p => p.organization.main, "some organization name")
))
谁能找出问题所在?
您可以使用 LINQ 的 .First()
扩展方法来引用 Elasticsearch 中的 "organization.main"
字段
var searchResults = client.Search<Document>(s => s
.Index(****)
.Type(****)
.MatchAll()
.Query(q =>
q.Term(p => p.organization.main.First(), "some organization name")
)
);
请记住,您的查询是在此处对整个数组进行操作,而不是 organization.main
中的第一项,因为 .First()
的用法可能暗示了这一点。数组被索引为无序的多值字段。然而,他们回来时订购了 _source
。