2013-08-28 41 views
3

我正在開發一個項目,我需要全文搜索一本書。我只需要一次在一本書中搜索,而且我需要從本書開始時起抵消搜索詞。我需要它支持Django/python,但我認爲Elasticsearch更好,更快。Elasticsearch獲取文檔中短語的位置

到目前爲止,我還沒有直接通過抽象層django-haystack直接使用Elasticsearch。

編輯1:我需要向用戶顯示他們不僅搜索他們正在搜索的文本,而且還鏈接他們以獲得該文本。基本上它應該像在Mac預覽中的搜索框一樣工作。用戶會看到帶有周圍文本的搜索結果,如果他們點擊它,他們會被JS重定向到文本所在的書的一部分。

+0

檢查我編輯的答案。 – lwiseman

回答

2

簡單高亮就足夠了嗎?即使不這樣做,暴力解決方案也會將突出顯示的pre_tags設置爲可編程的可識別值並計算偏移量。加快它在映射設置term_vector到with_positions_offsets使用Lucene的快速矢量熒光筆:

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

如果這是不能接受的,檢查出this答案的信息,偏移量是如何在內部存儲。

編輯:根據你的編輯,我不知道如何有抵消將有助於那麼多。我的意思是,除非您顯示預格式化文本或其他固定佈局,否則您如何知道偏移所對應的呈現頁面上的位置?

我認爲最優雅的解決方案是使用pre_tags和post_tags在元素中包裝匹配的文本。然後使用JavaScript爲每個匹配分配一個ID,從而創建可以設置位置的新片段標識符。

+0

我的解決方法是:首先搜索「number_of_fragments」:0,查找所有出現的文本,然後顯示給用戶文本。所以我有偏移和周圍的文字。我不認爲我能找到更好的解決方案。 –

+0

我知道這是幾年前,但你找到一個很好的解決方案呢?我正在嘗試做同樣的事情。 – bahrens

相關問題