使用C#Nest查询ElasticSearch

时间:2016-10-28 13:42:21

标签: c# elasticsearch 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")
                ))

有人能发现出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

您可以使用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中订购了。