Elasticsearch获取文档中短语的位置

时间:2013-08-28 08:52:26

标签: elasticsearch

我正在开展一个项目,我需要全文搜索一本书。我只需要一次搜索一本书,我需要从书的开头偏移搜索词。我需要它用于由Django / python驱动的站点,但我认为Elasticsearch更好更快。

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

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

1 个答案:

答案 0 :(得分:2)

简单的突出显示是否足够?即使不是,蛮力解决方案是将突出显示的pre_tags设置为可编程识别的值并从中计算偏移量。通过在映射中将term_vector设置为with_positions_offsets来加速它,以使用lucene的快速矢量高亮显示器:

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

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

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

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