我正在做一个项目来索引弹性搜索(版本 6)中网站的问题和答案,以进行搜索。
我首先想到创建两个索引,如下所示,一个用于问题,一个用于答案。
问题映射:
{"mappings": {
"question": {
"properties": {
"title":{
"type":"text"
},
"question": {
"type": "text"
},
"questionId":{
"type":"keyword"
}
}
}
}
}
答案映射:
{"mappings": {
"answer": {
"properties": {
"answer":{
"type":"text"
},
"answerId": {
"type": "keyword"
},
"questionId":{
"type":"keyword"
}
}
}
}
}
我使用多匹配查询以及 term 和 top_hits 聚合来搜索索引问答(参考问题)。我使用这种方法从搜索结果中删除重复项。作为答案或同一问题的问题本身可以出现在结果中。我只希望结果中的每个问题都有一个条目。我面临的问题是对结果进行分页。在弹性搜索中没有可能对聚合进行分页。它只能对命中而不是聚合进行分页。
然后我想到将问题和答案保存在一个文档中,将答案保存在 Json 数组中。这种方法的问题是没有干净的方法来添加、删除、更新给定问题文档中的特定答案。我发现的唯一方法是使用 groovy 脚本(提到的问题)。在 elasticsearch v6 AFAIK 中已弃用。
有没有更好更干净的方法来设计这个?谢谢。