elasticsearch - 返回 Elasticsearch 中搜索查询的位置和突出显示
问题描述
我正在使用安装在个人 Debian 服务器上的官方 Elasticsearch-PHP 客户端,我正在尝试做的事情包括索引、搜索和突出显示单个文档。即每个搜索结果将只返回一个文档 - 然后将突出显示“简单查询字符串”搜索。我也在使用 FVH(快速矢量突出显示)。
我的问题和这个Position 结果类似,不是高亮,而且测试代码基本相同,这里不再赘述。但是在我的情况下,我需要定位和突出显示。我点击了有关术语向量的文档的链接,但就像其他 OP 一样,我的搜索本身并不是确切的单词。在某些情况下,它们是短语。我将如何处理这个?
我的用例是只搜索一个文档(对于每个查询),并显示带有链接的结果摘要,用户可以单击这些链接转到文档中该结果来自的特定位置。如果我有索引/位置,我可以简单地将它用于文档的完整来源。我检查了文档无济于事。
解决方案
您可以尝试在此处安装由维基媒体基金会开发的名为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 分隔的数字对是命中。- 之前的数字是开始偏移量, - 之后的数字是结束偏移量。多值字段之间具有单个字符的偏移量。
让我知道该插件是否有帮助!
推荐阅读
- regex - 邮递员:如何从 html 响应中提取值并将其传递给邮递员中的下一个请求
- php - 在 Woocommerce 中使用 SQL 从特定产品属性值中获取产品 ID
- algorithm - 在 Prolog 中理解这个冒泡排序解决方案
- vue.js - vue/cli 3 未满足的依赖项
- c - 如何在 C 中以正确的方式从二进制结构中打印位域?
- git - 为什么git要添加父目录?
- javascript - 使用 Angular 从 API 访问数据(格式错误?)
- git - GIT:取消应用存储 - 指定的修订太多
- c# - 如何临时使用 Graphics.TranslateTransform
- heroku - Amazon S3 存储 Wagtail 媒体文件 - 仅 Heroku 上的服务器 500 错误