【问题标题】:ElasticSearch Nest - querying with just indexnameElasticSearch Nest - 仅使用 indexname 进行查询
【发布时间】:2017-03-20 16:09:02
【问题描述】:

我正在学习使用 ElasticSearch 和 Nest 作为 .Net 客户端。在索引数据时,我没有定义的模型(类型映射)来写入索引,我依靠 ElasticSearch 为我创建它

创建客户端

var settings = new ConnectionSettings(_config.Uri);
settings.DefaultIndex(_config.defaultIndexName);

_client = new ElasticClient(settings);

按类型信息索引数据

public void Index(object data)
{
    var response = _client.Index(data, d => d.Type(data.GetType().Name));
    if (!response.IsValid)
    {
        throw new InvalidOperationException(response.DebugInformation);
    }
}

如果数据类型是带有一些属性的Project

class Project
{
    int Id {get; set;}
    string Name {get; set;}
}

如何查询上述索引数据。请记住,索引部分和搜索/查询部分是系统的完全隔离的部分,它们彼此不知道,所以在搜索时,我能得到的最大值是被查询的“项目”类型的名称,但是不是其内部字段详细信息。那么,我如何在 ElasticSearch 中运行搜索查询,因为它的流畅 API 需要像这样

_client.Search<Project>(...)

但我想要一些通用的东西,比如

_client.Search('project', ...)

谢谢

【问题讨论】:

    标签: .net elasticsearch nest elasticsearch-net


    【解决方案1】:

    我不完全确定您所说的完全隔离是什么意思,但是使用 NEST 进行搜索是围绕使用 SearchDescriptors 构建的,您可以在其中指定很多内容,例如类型、索引、查询类型等。

    SearchResponse 类型在您的案例中是项目,它告诉嵌套将响应映射到哪个对象类型。

    所以:

    _client.Search<Project>(...); // Response.Hits should be a list of IHit<Projects>
    

    而您可以像这样在搜索描述符中指定搜索项目:

    _client.Search<SomeResponseType>(searchDescriptor => searchDescriptor
        .Type("project")
        .Query(q => q.Term("name", "fooBar")));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多