繁体   English   中英

NEST无法找到弹性搜索可以找到的文档

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM