我想使用Elasticsearch.Net/NEST搜索相关文档。例如,我有:
Person:
id name address_id
-- ---- ----------
1 John 1
2 Mary 2
Address:
id city
-- ------
1 Boston
2 Berlin
我想单独存储Person和Address文档,并根据Address字段返回Person文档。例如,返回居住在波士顿的人的所有文件。我在Elaticsearch文档中看到了一些使用映射和父/子指令的例子,但Elasticsearch.Net/NEST没有。任何代码示例或指针都将非常感谢......
答案 0 :(得分:9)
这是一个地址为父
的小片段编辑: 创建索引:
var indicesOperationResponse = _client.CreateIndex(ci => ci.Index("test")
.AddMapping<Address>(m => m.MapFromAttributes())
.AddMapping<Person>(m => m.MapFromAttributes().SetParent<Address>()));
索引文件:
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)));
按父母搜索
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"))))));
答案 1 :(得分:3)
我认为最好看的地方是NEST单元测试。
同样在Nest Documentation Site上有一个用于运行has_child查询的小代码段。 (与单元测试几乎相同)