这是我搜索文档的方式,但它不返回任何结果:
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 客户端 0.12.0 (NuGet)
最佳答案
虽然 Chris Mantle 的说法是正确的,即查询并不完全匹配,但它们在功能上应该几乎是等效的。
您的搜索正在对 /_all/clusterinstances/_search
进行搜索,您可能想要的是:
.Search(s=>s
.AllIndices()
.AllTypes()
...
或
.Search(s=>s
.AllIndices()
.Type("clusters")
...
NEST 默认情况下通过小写和复数 CLR 类型名来推断 elasticsearch 类型。
如果您像这样设置连接设置:
var settings = new ConnectionSettings(uri)
.SetDefaultIndex("cmdbcli")
.MapDefaultTypeNames(d=>d
.Add(typeof(ClusterInstance), "clusters")
)
....
然后
.Search<ClusterInstance>(s=>s.Query())
默认为/cmdbcli/clusters/_search
关于c# - NEST无法找到elasticsearch可以找到的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22022541/