首页 文章

ElasticSearch Nest - 仅使用indexname查询

提问于
浏览
1

我正在学习使用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', ...)

谢谢

1 回答

  • 2

    当你说完全孤立时,我并不完全确定你的意思,但使用搜索引擎创建了NEST,你可以在其中指定类似于类型,索引,查询类型等等 .

    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")));
    

相关问题