我最近开始使用elasticsearch。我有文件,其中有父子关系,但我决定将孩子存储在编号字段中。例如:
{
"id": "1",
"name": "parent1",
"child": {
"1": {
"id": "13"
"content": "child 13 content"
},
"2": {
"id": "25"
"content": "child 25 content"
},
"3": {
"id: "75"
"content": "child 75 content"
},
"4": {
"id": "125"
"content": "child 125 content"
}
}
}
我这样做了所以我可以在这些字段上使用突出显示,并在以后轻松找到突出显示的孩子的ID。我用这样的荧光笔:
"highlight": {
"order": "score",
"fields": {
"name": {
"number_of_fragments": 0
},
"child.*.content": {
}
}
}
这种结构导致很多空字段,一个父母可能有数百个孩子,而大多数只有一对或没有。
我运行了一些测试搜索,突出显示非常慢。然后我尝试将突出显示的字段限制为我的测试搜索中的最大字段数。 (其中1个结果包含36个孩子,所以在我的荧光笔中使用“孩子。*。内容”而不是用1-36岁儿童替换它。令我惊讶的是,它将搜索时间缩短了10倍。我尝试将字段37-72添加到突出显示中,它几乎使搜索时间加倍。
对我而言,突出空场需要花费很多时间,这有点令人惊讶。有没有更好的处理稀疏字段的突出显示方法?或者以任何方式强制突出显示器跳过这些字段(或定义突出显示器如何处理空字段)?
我真的想避免使用父/子关系,使用当前结构会更容易。