一尘不染

Elasticsearch-片段在文档中的位置

elasticsearch

我正在执行类似下面的短语查询。它返回给我按相关性排序的突出显示的片段。自然,我希望用户单击一个片段,然后将文档滚动到相应的位置。但是,我在Elasticsearch中看不到任何方法来找出片段在原始文档中的位置。有任何想法吗?

GET documents/doc/_search
{
   "query": {
        "match_phrase": {
            "text": {
                "query": "hello world",
                "slop":  10
            }
        }
    }, 
    "highlight" : {
        "order" : "score",
        "fields" : {
            "text" : {"fragment_size" : 100, "number_of_fragments" : 10}
        }
    }
}

阅读 268

收藏
2020-06-22

共1个答案

一尘不染

在此期间,我们找不到合适的解决方案,并遭到了以下黑客攻击(对我们而言非常有效):在索引之前,我们用“ [index]”注释文本中的每个单词,以便“
一些要索引的文本 ”变成“ some [00]文本[01]到[02]索引[03]
”。然后,我们使用char过滤器,如下所示。当突出显示返回时,我们从突出显示文本中解析出单词位置。

"settings": {
    "analysis": {
      "char_filter": {
        "remove_annotation": {
          "type": "pattern_replace",
          "pattern": "\\[[0-9]+\\]",
          "replacement": ""
        }
      },
      "analyzer": {
        "annotated_english_language_analyzer": {
          "type": "custom",
          "char_filter": [
            "remove_annotation"
          ],
          ...

请注意,注释索引应填充到log10(text_length)+1数字,以使找到的突出显示(删除注释后)的宽度不取决于发现的位置(从开始到结束)。

2020-06-22