c# - NEST无法找到elasticsearch可以找到的文档

标签 c# asp.net-mvc-4 nest

这是我搜索文档的方式,但它不返回任何结果:

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/

相关文章:

c# - 如何使用 .wer 文件调试应用程序

c# - 代码契约(Contract) : Ensures Unproven & Requires Unproven

c# - 通过 C# 在 Yammer 中发布提要

c# - 从 ObservableCollection<t>.Where 获取索引和对象

asp.net - mvc3中如何实现URL重写?

asp.net-mvc - 层次结构中的多个 AppSettings.config 文件

asp.net-mvc - 为什么我的 MVC 应用程序试图以我的机器而不是应用程序池身份登录我的数据库?

elasticsearch - 如何使用.net elasticsearch客户端查询logstash索引?

c# - 从弹性中排除(不包含)某些值的查询

c# - DynamicDictionary在ElasticSearch 2.0(Elasticsearch.Net)上不再可用