ElasticSearch Nest - 仅使用索引名进行查询

ElasticSearch Nest - querying with just indexname

正在学习使用 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 并具有一些属性

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

如何查询上述索引数据。请记住,索引部分和 search/query 部分是系统中完全隔离的部分,它们彼此不知道,所以在搜索时,我最多可以获得类型的名称 'Project' 被查询但不是其内部字段详细信息。因此,我如何 运行 ElasticSearch 中的搜索查询,因为它的流畅性 API 需要像这样

_client.Search<Project>(...)

但我想要像

这样通用的东西
_client.Search('project', ...)

谢谢

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

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

所以:

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