5

我正在做一个需要全文搜索一本书的项目。我一次只需要搜索一本书,我需要从书的开头获取搜索词的偏移量。我需要它用于由 Django/python 提供支持的站点,但我认为 Elasticsearch 更好更快。

到目前为止,我还没有直接通过抽象层 django-haystack 直接使用 Elasticsearch。

Edit1:我不仅需要为用户显示他们正在搜索的文本,还需要为他们提供链接以获取该文本。基本上它应该像 Mac 上预览中的搜索框一样工作。用户会看到带有周围文本的搜索结果,如果他们点击它,他们会被 JS 重定向到文本所在的书籍的一部分。

4

1 回答 1

2

简单的突出显示就足够了吗?即使没有,一个蛮力解决方案是将突出显示的 pre_tags 设置为可编程的可识别值,并从中计算偏移量。通过在映射中将 term_vector 设置为 with_positions_offsets 来加速它,以使用 lucene 的 fast-vector-highlighter:

{
    "type_name" : {
        "content" : {"term_vector" : "with_positions_offsets"}
    }
}

如果这是不可接受的,请查看答案以获取有关如何在内部存储偏移量的信息。

编辑:根据您的编辑,我不确定偏移量会有多大帮助。我的意思是,除非您正在显示预格式化的文本或其他一些固定布局,否则您如何知道渲染页面上的偏移量对应的位置?

我认为最优雅的解决方案是使用 pre_tags 和 post_tags 将匹配的文本包装在元素中。然后使用 JavaScript 为每个匹配项分配一个 id,创建可以设置位置的新片段标识符。

于 2013-08-28T10:00:42.883 回答