2016-10-28 56 views
0

有一个ElasticSearch索引,这是潜在的点击率是建立这样的:查询ElasticSearch与C#巢

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") 
       )) 

任何人都可以发现哪里出了问题?

+0

你可以分享索引映射吗? – Rob

回答

2

您可以使用LINQ的.First()扩展方法来引用"organization.main"领域Elasticsearch

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