Using Elasticsearch.Net/NEST to search parent documents based on child attributes, where parent/child documents are stored separately

前端 未结 2 917
情话喂你
情话喂你 2021-01-01 06:49

I would like to use Elasticsearch.Net/NEST to search related documents. For example, I have:

Person:

id name address_id
-- ---- ----------
1  John 1
2  Mary         


        
相关标签:
2条回答
  • 2021-01-01 07:01

    Here's a small snippet where the address is the parent

    EDIT: Create the index:

    var indicesOperationResponse = _client.CreateIndex(ci => ci.Index("test")
                .AddMapping<Address>(m => m.MapFromAttributes())
                .AddMapping<Person>(m => m.MapFromAttributes().SetParent<Address>()));
    

    Index documents:

    var bulkResponse = _client.Bulk(b => b
                .Index<Address>(bd => bd.Object(new Address { Name = "Tel Aviv", Id = 1 }).Index("test"))
                .Index<Person>(bd => bd.Index("test").Object(new Person {Id = 5, Address = 1, Name = "Me"}).Parent(1)));
    

    And search by parent

    var searchResponse = _client.Search<Person>(s => s
            .Query(q=>q.MatchAll())
            .Filter(q => q
                .HasParent<Address>(c => c
                    .Query(cq => cq.Match(m=>m.OnField(t => t.Name).Query("Tel Aviv"))))));
    
    0 讨论(0)
  • 2021-01-01 07:04

    I think the best place to look is at the NEST Unit Tests.

    • Fluent Mapping Full Example Tests - Includes an example of setting Parent relationship.
    • Has Parent Query
    • Has Child Query
    • Top Children Query

    Also on the Nest Documentation Site there is a small snippet for running a has_child query. (Pretty much the same as the unit test)

    0 讨论(0)
提交回复
热议问题