ElasticSearch - 基于递归结构中的深度进行提升

时间:2017-03-28 19:21:37

标签: elasticsearch spring-boot spring-data-elasticsearch

我使用的是弹性搜索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

是否可以通过改变结构来实现?

1 个答案:

答案 0 :(得分:0)

是的,您可以通过使用Nested datatype映射和Function Score Query内的Nested Query索引修改后的格式(平面对象数组)文档来实现此目的:

sec

在此示例中,文档1得分较高,因为它在深度0处具有匹配sec的标题,而文档2在深度1处仅具有匹配function_score的标题。

嵌套数据类型和查询确保exp将匹配的标题与其深度相关联,函数分数 python -m SimpleHTTPServer 优先考虑深度较低的标题。