我正在使用安装在个人 Debian 服务器上的官方 Elasticsearch-PHP 客户端,我想要做的事情包括索引、搜索和突出显示单个文档。即每个搜索结果只会返回一个文档 - 然后该文档将突出显示以进行“简单查询字符串”搜索。我也在使用 FVH(快速矢量突出显示)。
我的问题与这个类似位置作为结果,而不是突出显示并且测试代码基本相同,所以我不会在这里重复。然而,就我而言,我需要both位置和突出显示。我点击了有关术语向量的文档的链接,但就像其他OP一样,我的搜索本身并不是确切的单词。在某些情况下,它们是短语。我该如何处理这个问题? 我的用例是仅搜索一个文档(对于每个查询),并提供结果摘要,其中包含链接,用户可以单击这些链接转到文档中该结果来源的特定位置。如果我有索引/位置,我可以简单地将其用于文档的完整源代码。我检查了文档没有结果。
开发的特定插件,名为 实验荧光笔 -github 此处 您可以通过这种方式安装elasticsearch 7.5 - 其他elasticsearch版本请参考github项目页面:
./bin/elasticsearch-plugin install org.wikimedia.search.highlighter:experimental-highlighter-elasticsearch-plugin:7.5.1
并重新启动elasticsearch。
因为您还需要检索
positions
- 如果对于您的用例,偏移量可以替换位置,请继续到下一段 - 您应该使用带有索引选项的 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']
内输入 - 文本是您的字段名称 - 并使用起始偏移点和结束偏移点从字段中提取文本。您需要确保使用正确的字符串编码 - UTF-8
- 否则偏移量与文本不匹配。根据医生的说法:
return_offsets 选项更改突出显示的结果
字符串到突出显示的偏移量
突出显示。如果您需要保持客户端理智,这很有用
检查突出显示。而不是标记的片段,您将
得到类似 0:0-5,18-22:22 的结果。外面的数字是开始和
片段的结束偏移量。由 ,s 分隔的数字对
是热门歌曲。 - 之前的数字是起始偏移量,
- 之后的数字是结束偏移量。多值字段有一个
它们之间的单个字符偏移量。让我知道该插件是否有帮助!