【问题标题】:How to search to the default index using NEST?如何使用 NEST 搜索到默认索引?
【发布时间】:2019-03-14 06:45:53
【问题描述】:

这是我的默认索引:

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

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

GET profiles/_search

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

ElasticSearch.Search< object>()

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

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

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

    您将在搜索后得到结果。该对象是它所需要的。 为具有如下属性的配置文件创建模型类。

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

    并使用

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

    它会在结果中为您提供个人资料列表。

    【讨论】:

      【解决方案2】:

      Search&lt;T&gt;() 这样的 NEST 方法中的 T 用于几个目的:

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

      如果您不需要或不希望其中任何一种行为,您可以使用objectdynamic 来表示T,并为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"
            }
          }
        }
      }
      

      【讨论】:

      • 像魅力一样工作! .AllTypes() 是我所缺少的。谢谢!
      猜你喜欢
      • 2018-01-12
      • 2018-05-29
      • 2021-05-18
      • 1970-01-01
      • 2014-02-21
      • 2022-01-03
      • 1970-01-01
      • 2021-08-12
      • 2015-02-17
      相关资源
      最近更新 更多