![](/img/trans.png)
[英]find documents with empty field / Attachment.Content in elastic search using Nest + C#
[英]NEST not able to find documents that elastic search can find
这是我搜索文档的方式,但是不返回任何结果:
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)
尽管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
您的查询不匹配。 您的代码产生的查询将是一个简单的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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.