您可以尝试在此处安装由维基媒体基金会开发的名为Experimental Highlighter -github的特定插件
您可以通过这种方式安装elasticsearch 7.5 - 对于其他elasticsearch版本请参考github项目页面:
./bin/elasticsearch-plugin install org.wikimedia.search.highlighter:experimental-highlighter-elasticsearch-plugin:7.5.1
并重启elasticsearch。
因为您还需要检索positions
- 如果对于您的用例,偏移量可以替换位置,请继续下一段 - 您应该使用带有 index 选项的 termvector 声明您的字段 "with_position_offset_payloads"
- doc here
PUT /my-index-000001
{ "mappings": {
"properties": {
"text": {
"type": "text",
"term_vector": "with_positions_offsets_payloads",
"analyzer" : "fulltext_analyzer"
}
}
}
}
对于其他不需要检索位置的情况,使用索引选项更快并且使用更少的空间-此处"offsets"
为弹性文档,此处为插件文档:
PUT /my-index-000001
{ "mappings": {
"properties": {
"text": {
"type": "text",
"index_options": "offsets",
"analyzer" : "fulltext_analyzer"
}
}
}
}
然后您可以使用实验荧光笔查询并仅返回荧光笔部分的偏移量:
{
"query": {
"match": {
"text": "hello world"
}
},
"highlight": {
"order": "score",
"fields": {
"text": {
"number_of_fragments": 10,
"fragment_size": 15,
"type": "experimental",
"options": {"return_offset": true}
}
}
}
}
这样,您的查询不会返回任何文本,而只会返回代表位置start offset
的数字和end offset
- 数字。要检索突出显示的内容,您需要在里面输入['hits']['hits'][0]['_source']['text']
-text 是您的字段名称 - 并使用您的起始偏移点和结束偏移点从字段中提取文本。您需要确保使用正确的字符串编码 - UTF-8
- 否则偏移量与文本不匹配。根据文档:
return_offsets 选项将结果从突出显示的字符串更改为突出显示的偏移量。如果您需要对突出显示进行客户端完整性检查,这很有用。您将得到类似 0:0-5,18-22:22 的结果,而不是标记的片段。外部数字是片段的开始和结束偏移量。由 ,s 分隔的数字对是命中。- 之前的数字是开始偏移量, - 之后的数字是结束偏移量。多值字段之间具有单个字符的偏移量。
让我知道该插件是否有帮助!