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

时间:2019-03-13 16:20:50

标签: elasticsearch nest

这是我的默认索引:

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

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

GET profiles/_search

我的问题是,NEST的Search方法需要一个对象。

ElasticSearch.Search< object>()

如何在个人资料索引本身上执行搜索?

2 个答案:

答案 0 :(得分:1)

ElasticSearch.Search()不在对象上搜索。调用搜索方法时,它会使用您的个人资料索引。

搜索后将得到结果。需要该对象。 为配置文件创建模型类,其属性如下所示。

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

然后使用

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

它将在结果中为您提供一个配置文件列表。

答案 1 :(得分:0)

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

  1. 通过lambda表达式为T的属性提供强类型访问
  2. 如果API返回JSON文档,例如Search<T>()返回每个匹配的_source字段下的原始索引文档,则T将是该文档的类型反序列化。

如果您不需要或不需要这些行为,可以对object使用dynamicT并为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"
      }
    }
  }
}