这是我搜索文档的方式,但它不会返回任何结果:
var results = ElasticClient.Search<ClusterInstance>(body => body
.AllIndices()
.Size(500)
.Query(query => query
.QueryString(qs => qs.Query("MyTestName"))
)
);
resultobject.clusterinstances = results.Documents.ToList();
当我在Elasticsearch中使用它作为搜索查询时,我得到了我需要的结果(其中2个)。
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "MyTestName"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 10,
"sort": [],
"facets": {}
}
创建ElasticClient:
private static ElasticClient ElasticClient
{
get
{
var uri = new Uri("http://localhost:9200")
return new ElasticClient(new ConnectionSettings(uri));
}
}
索引:
foreach (var cluster in db.ClusterInstances.Where(a => a.Active.Equals(true)))
{
client.Index(cluster, "cmdbcli", "clusters", cluster.ClusterInstanceID);
}
版本:NEST - Elasticsearch Client 0.12.0(NuGet)
答案 0 :(得分:4)
虽然Chris Mantle认为查询不完全匹配,但它们几乎应该在功能上相同。
您的搜索正在/_all/clusterinstances/_search
搜索您可能想要的内容:
.Search(s=>s
.AllIndices()
.AllTypes()
...
或
.Search(s=>s
.AllIndices()
.Type("clusters")
...
默认情况下,NEST通过小写和复数化CLR类型名来推断弹性搜索类型。
如果你设置了这样的连接设置:
var settings = new ConnectionSettings(uri)
.SetDefaultIndex("cmdbcli")
.MapDefaultTypeNames(d=>d
.Add(typeof(ClusterInstance), "clusters")
)
....
然后
.Search<ClusterInstance>(s=>s.Query())
将默认为/cmdbcli/clusters/_search
答案 1 :(得分:1)
您的查询不匹配。您的代码生成的查询将是一个简单的query_string
查询,而不是您在JSON查询中定义的bool
查询。我认为您需要更改代码以生成与您在JSON中定义的代码类似的查询:
var results = ElasticClient
.Search<ClusterInstance>(body => body
.AllIndices()
.Size(500)
.Query(query => query
.Bool(@bool => @bool
.Must(must => must
.QueryString(qs => qs
.Query("MyTestName"))))));
resultobject.clusterinstances = results.Documents.ToList();