简体   繁体   中英

ElasticSearch Nest - querying with just indexname

Am learning to use ElasticSearch with Nest as the .Net client. While indexing the data, I don't have a defined model (type mapping) to write the index to, I rely on ElasticSearch to create that for me

Creating the client

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

_client = new ElasticClient(settings);

Indexing data by Type info

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

Say if the data type was Project class with some properties

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

How do I query the above indexed data. Please bear in mind that the indexing part and the search/query part are completely isolated parts of the system and they are not aware of each other, so at search time, maximum I can get is the name of type 'Project' being queried but not its internal fields details. So, How can I run the search query in ElasticSearch as its fluent API would need to be something like this

_client.Search<Project>(...)

but I want something generic like

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

Thanks

I'm not completely sure what you mean when you say completely isolated, but searching with NEST is built around using SearchDescriptors, where you can specify quite a lot like the types, indices, query type and so on.

The SearchResponse type which is project in your case telling nest which object type to map the response to.

So:

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

Whereas you could specify searching for projects in the search descriptor like this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM