我使用的是弹性搜索2.4.4(与spring boot 1.5.2兼容)。
我有一个文档对象,它具有以下结构:
{
id : 1,
title : Doc title
//some more metadata
sections :[
{
"id" : 2,
"title: Sec title 1,
sections:[...]
},{
id : 3,
title: Sec title 2,
sections:[...]
}
]
}
基本上我想让文档中的标题可搜索(所有文档标题,章节标题和任何级别的小节标题),我希望能够根据文档在树层次结构中匹配的级别对文档进行评分
我最初的想法是使用这样的结构:
{
titles:[
{
title : doc title,
depth : 0
},
{
title : sec title 1,
depth : 1
},
{
title : sec title 2,
depth : 1
},
......
]
}
我想根据匹配的深度对文档进行排名(深度越高,得分越低)。
我知道基于该领域的基本提升,但是,
有没有办法在弹性搜索中做到这一点?
OR
是否可以通过改变结构来实现?
答案 0 :(得分:0)
是的,您可以通过使用Nested datatype映射和Function Score Query内的Nested Query索引修改后的格式(平面对象数组)文档来实现此目的:
sec
在此示例中,文档1得分较高,因为它在深度0处具有匹配sec
的标题,而文档2在深度1处仅具有匹配function_score
的标题。
嵌套数据类型和查询确保exp
将匹配的标题与其深度相关联,函数分数 python -m SimpleHTTPServer
优先考虑深度较低的标题。