使用Elasticsearch.Net/NEST基于子属性搜索父文档,其中父/子文档单独存储

Bil*_* P. 3 .net elasticsearch nest

我想使用Elasticsearch.Net/NEST来搜索相关文档.例如,我有:

Person:

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

Address:

id city
-- ------
1  Boston
2  Berlin
Run Code Online (Sandbox Code Playgroud)

我想分别存储Person和Address文档,并根据Address字段返回Person文档.例如,返回居住在波士顿的人的所有文件.我在Elaticsearch文档中看到了一些使用映射和父/子指令的例子,但Elasticsearch.Net/NEST没有.任何代码示例或指针将不胜感激......

Udi*_*Udi 9

这是一个小片段,其中地址是父母

编辑:创建索引:

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

索引文件:

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)));
Run Code Online (Sandbox Code Playgroud)

并按父母搜索

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"))))));
Run Code Online (Sandbox Code Playgroud)

  • 如何索引单个子文档?据我所知,`_client.Index(somePerson)`是单独索引文档的唯一方法.之后无法指定`.Parent(parentId)`. (2认同)