ElasticSearch获得突出显示的片段的偏移量

raf*_*zzi 29 elasticsearch

是否有可能获得每个突出显示的片段的字符位置?我需要将突出显示的文本与源文档相匹配,并且使字符位置成为可能.

例如:

curl "localhost:9200/twitter/tweet/_search?pretty=true" -d '{
    "query": {
        "query_string": {
            "query": "foo"
        }
    },
    "highlight": {
        "fields": {
            "message": {"number_of_fragments": 20}
        }
    }    
}'
Run Code Online (Sandbox Code Playgroud)

返回这个高潮:

"highlight" : {
    "message" : [ "some <em>foo</em> text" ]
 }
Run Code Online (Sandbox Code Playgroud)

如果匹配文档中的字段消息是:

"Here is some foo text"
Run Code Online (Sandbox Code Playgroud)

有没有办法知道片段从char 8开始到匹配字段的char 21结束?

知道匹配令牌的开始/结束偏移对我来说也是好事 - 也许有一种方法可以使用script_fields访问该信息?(此问题显示如何获取令牌,但不显示偏移量).

字段"消息"具有:

"term_vector" : "with_positions_offsets",
"index_options" : "positions" 
Run Code Online (Sandbox Code Playgroud)

dre*_*ewr 10

客户端方法实际上是标准做法.

我们已经讨论过添加补偿,但担心这会导致更多的混乱.提供的偏移量特定于Java的UTF-16字符串编码,虽然它们在技术上可用于计算$ LANG中的片段,但解析您指定的分隔符的响应文本更为直接.

  • 这里有一个关于它的功能请求:https://github.com/elastic/elasticsearch/issues/5736 (3认同)
  • 因此,如果我有一个 10,000 页的文档,并且我的用户想要搜索第 5000 到 6000 页之间的一个晦涩术语,您希望我下载整个文档,并执行我自己的正则表达式,以便告诉我的用户哪个页面即使您已经在内部拥有此信息并且实际上正在使用它来有效地制作亮点,该术语仍然有效。(而且这还是 8 年前的事了!) 太荒谬了。 (2认同)

Jac*_*kel 6

我们最终扩展了原始文本,如下所示:

一些[1]文本[2]我们[3]索引[4]

然后我们定义一个自定义分析器:

"char_filter": {
        "remove_tags": {
          "type": "pattern_replace",
          "pattern": "\\[[0-9]+\\]",
          "replacement": ""
Run Code Online (Sandbox Code Playgroud)

现在,在突出显示的片段中,我们获得了位置标记,并且我们知道它们出现在文本中的哪个位置.丑,但有效!

在这里给出了更全面的答案