嗨Elasticsearch专家。
我遇到的问题可能是因为我正在索引数据库关系数据。
我的方案如下:
我有两个实体:
文件和会议。
文件和会议是独立的实体。虽然可以按给定的顺序将文档分配给会议。
我们在数据库中使用连接表。
meetings(id,name,date) document(id,title,author) meeting_document(doc_id,meeting_id,order)
在elasticsearch中,我将documents_id索引为会议的NESTED属性
会议示例:
{ id: 25 name:"test", documents: [22,12,24,55] }
我将获取会议,之后我想向document.id上的文件过滤请求,并要求elasticsearch以与我在过滤器列表中传递的顺序相同的顺序返回列表。
实施此方法的最佳方法是什么?
由于
答案 0 :(得分:2)
好问题, 我花了一些时间为你找到一个解决方案,然后提出一个解决方案,它可能很棘手,但有效。
让我们看看我的查询,
我使用了script score,按用户定义列表进行排序。
POST index/type/_search
{
"query": {
"function_score": {
"functions": [
{
"script_score": {
"script": "ar.size()-ar.indexOf(doc['docid'].value)",
"params": {
"ar": [
"1",
"2",
"4",
"3"
]
}
}
}
]
}
},
"filter": {
"terms": {
"docid": [
"1",
"2",
"4",
"3"
]
}
}
}
你需要注意的事情是,
发送,过滤器和参数的相同值。就像上面的查询一样。
这会使我返回文档ID,1,2,4,3。
您必须在脚本和过滤器中更改字段名称,并且可以在查询对象中使用termQuery
。
我已经测试了代码,希望这有帮助!! 感谢