我成功使用ES索引文档并突出显示搜索文本。但是现在我有一个新的要求 - 使所有黄色高光可以链接,即用户必须能够潜入选定出现的页面。
我还没有实现文档的页面预览,但我确定存在一些获取页码或字节偏移量的软件并将docx或pdf页面作为图像返回。所以,我希望弹性返回出现的索引(很可能是从开头的字节偏移)。之后我可能可以使用 indexToImage 软件向用户显示出现的页面。即使这样的软件不存在,我也可以打开RandomAccessFile并读取出现页面并以某种方式向用户显示。 但无论如何我需要出现指数。是否可以从弹性中获取它?
我的搜索请求如下:
http://localhost:9200/mongofilesindex/_search?pretty&source={
"_source": ["filename",
"metadata"],
"query": {
"filtered": {
"query": {
"query_string": {
"query": "*test*"
}
}
}
},
"highlight": {
"pre_tags": ["<mark>"],
"post_tags": ["</mark>"],
"fields": {
"content": {
"fragment_size": 200,
"number_of_fragments": 10
}
}
}
}&size=10&from=0
当然,我可以使用ES来提取匹配的文档,然后在输入流中手动应用KMP,它在线性时间内工作。但我想要比线性更好的东西,因为我知道后缀自动机和其他复杂的数据结构可能会在O(search_string_len+occurences_count)
中返回出现,这比O(doc_len)
要好得多。
我确信弹性使用了如此酷的数据结构,可能我缺少一些用于获取出现索引的API。