我是“弹性搜索”的新手,目前正试图了解 ES 如何保持“父子”关系。我从以下文章开始:
https://www.elastic.co/blog/managing-relations-inside-elasticsearch
但是这篇文章是基于旧版本的 ES 的,我目前使用的是 ES 7.5,它指出:
_parent 字段已被删除,取而代之的是 join 字段。
现在我正在关注这篇文章:
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/parent-join.html
但是,我无法获得预期的结果。
我有一个场景,其中我有两个索引“Person”和“Home”。每个“人”可以有多个“家”,这基本上是一对多的关系。问题是当我查询以获取父母为“XYZ”人的所有房屋时,答案为空。
以下是我的索引结构和搜索查询:
人物指数:
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"person_home": {
"type": "join",
"relations": {
"person": "home"
}
}
}
}
}
主页索引:
请求网址:http://hostname/home
{
"mappings": {
"properties": {
"state": {
"type": "text"
},
"person_home": {
"type": "join",
"relations": {
"person": "home"
}
}
}
}
}
在人员索引中添加数据
请求网址:http://hostname/person/_doc/1
{
"name": "shujaat",
"person_home": {
"name": "person"
}
}
在主页索引中添加数据
请求网址:http://hostname/home/_doc/2?routing=1&refresh
{
"state": "ontario",
"person_home": {
"name": "home",
"parent": "1"
}
}
查询获取数据:(获取所有父为 person id "1" 的记录)
请求网址:http://hostname/person/_search
{
"query": {
"has_parent": {
"parent_type": "person",
"query": {
"match": {
"name": "shujaat"
}
}
}
}
}
或者
{
"query": {
"has_parent": {
"parent_type": "person",
"query": {
"match": {
"_id": "1"
}
}
}
}
}
回复:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
}
}
我无法理解我在这里缺少什么或上述查询有什么问题,因为它没有返回任何数据。