如何使用 NEST 搜索到默认索引?

How to search to the default index using NEST?

这是我的默认索引:

new ConnectionSettings(node).DefaultIndex("profiles")

我目前有这个查询,我需要使用 NEST 执行搜索:

GET profiles/_search

我的问题是,NEST 需要一个用于搜索方法的对象。

ElasticSearch.Search< object>()

如何对配置文件索引本身执行搜索?

ElasticSearch.Search() 不搜索对象。当您调用 Search 方法时,它会使用您的 profiles 索引。

搜索后会有结果。它需要该对象。 为具有如下属性的配置文件创建模型 class。

public class Profile
{
    public string Name{get;set;}
}

并使用

调用您的 ElasticSearch 服务器
ElasticSearch.Search<Profile>()

它会在结果中给你一个配置文件列表。

Search<T>() 这样的 NEST 方法中的 T 有两个用途:

  1. 通过 lambda 表达式为 T
  2. 的属性提供强类型访问
  3. 在 API returns 一个 JSON 文档的情况下,例如 Search<T>() 在每个命中的 _source 字段下返回最初索引的文档, T 将是该文档反序列化的类型。

如果您不需要或不希望这些行为中的任何一种,您可以对 T 使用 objectdynamic 并为 Field 等值指定字符串.然后,您需要弄清楚如何阅读该 POCO;在 dynamic 的情况下,返回的类型是一个类似于 JObject 的内部类型,因此您可以动态访问它的属性。

为了在 URI 中不使用 类型进行搜索 ,您可以使用

var searchResponse = client.Search<object>(s => s
    .AllTypes()
    .Query(q => q
        .Match(m => m
            .Field("some_field")
            .Query("match query")
        )
    )
);

这会产生类似

的搜索请求
POST http://localhost:9200/profiles/_search 
{
  "query": {
    "match": {
      "some_field": {
        "query": "match query"
      }
    }
  }
}