一尘不染

以位置顺序返回Elasticsearch高亮结果吗?

elasticsearch

我目前正在使用Elasticsearch在查询中提供的突出显示功能。但是,我不太清楚的一件事是关于结果的排序方式。我希望他们order that they appear在段落而不是重要性/得分中返回。这样一来,我就可以按照与...原始文档中相同的顺序将它们与连接在一起(类似于Google结果)。但是,他们目前正在根据最佳匹配以某种加权顺序返回?

有没有一种方法可以完成此操作,而无需在看到突出显示结果之后在现场进行其他后处理。

我看到有"order" : "score"一个突出显示的选项,但是似乎没有其他记录在案的选项可以更改退货顺序。(顺便说一句,我不理解默认顺序和计分顺序之间的区别)。

这是我查询中突出显示的部分。

  "highlight": {
    "fields": {
      "synopsis": {
        "fragment_size": 150,
        "number_of_fragments": 4
      }
    }
  }

阅读 351

收藏
2020-06-22

共1个答案

一尘不染

因此,在进行了一些尝试之后,我发现fast-vector- highlighter会按照原始文档中出现的顺序对片段进行自然排序。为了实现这一点,我需要添加"term_vector" : "with_positions_offsets"到大纲字段映射中。

{
  "properties" : {
    "synopsis" : {
      "type" : "string",
      "term_vector": "with_positions_offsets"
    }
  }
}

然后使用我的高亮查询:

{
  "query": {
    "match": {
      "synopsis": "foo"
    }
  },
  "highlight": {
    "fields": {
      "synopsis": {
        "type": "fvh",
        "fragment_size": 150,
        "number_of_fragments": 4
      }
    }
  }
}

注意:使用"order" : "score"将导致排序遵循计分模式,而不一定遵循起始位置偏移顺序。我相信可以在这里找到该比较器的确切代码,这似乎是基于片段的增强,然后是其起始偏移量。

2020-06-22