Elasticsearch获取短语在文档中的位置



我正在做一个项目,需要对一本书进行全文搜索。我一次只需要搜索一本书,我需要从书的开头得到搜索词的偏移量。我需要它来支持Django/python的网站,但我认为Elasticsearch更好更快。

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

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

简单的高亮显示就足够了吗?即使没有,强力解决方案也将是将突出显示pre_tag设置为可编程识别的值,并计算其偏移量。通过在映射中将term_vector设置为with_positions_offsets以使用lucene的快速矢量荧光笔:来加快速度

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

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

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

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

最新更新