在此期间,我们找不到合适的解决方案,并遭到了以下黑客攻击(对我们而言非常有效):在索引之前,我们用“ [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
数字,以使找到的突出显示(删除注释后)的宽度不取决于发现的位置(从开始到结束)。