2015-02-05 41 views
0

我使用lunr執行搜索,並且我當前正在突出搜索文本區域的值,但lunr使用了詞幹分析器和返回不完全匹配完整搜索詞的結果。有沒有方法可以訪問lunr最終搜索的搜索詞的詞幹?lunr:返回搜索條件的詞幹,以便在結果中突出顯示它

// query our lunr index 
searchResults = _.map(index.search($('#searchInput').val()), function (res) { 
    var uid = res.ref; 
    return mediaList[uid]; 
}); 

回答

1

是lunr使用的默認詞幹是作爲一個函數在lunr.stemmer

您可以自己與任何令牌要幹,例如叫它

lunr.stemmer("stemming") //= "stem" 

不過,我不認爲這會幫助你實現你想要什麼,因爲你正在尋找也被截斷的文件的標記和出於此是單向操作。例如,你不會知道在上面的例子中還有哪些詞會被「干擾」,因此可能會錯過某些術語來突出顯示。

解決辦法可能是保留自己的反向詞彙查找,以便稍後可以更輕鬆地匹配輸出中的結果搜索詞。這可以通過在索引中插入一個自定義管道函數來實現:

// going to store a hash of stemmed word to list of original words 
var reverseStem = {} 

var reverseStemIndexBuilder = function (token) { 
    var stemmed = lunr.stemmer(token) 

    if (stemmed in reverseStem) { 
    reverseStem[stemmed].push(token) 
    } else { 
    reverseStem[stemmed] = [token] 
    } 

    return stemmed 
} 

// idx is your instance of a lunr index  
// we can remove the existing stemmer since reverseStemIndexBuilder already returns a stemmed token 
idx.pipeline.remove(lunr.stemmer) 
idx.pipeline.add(reverseStemIndexBuilder) 

現在,您可以查找所有的幹可能來自令牌,然後發現他們在搜索結果中,並相應地突出顯示它們。

相關問題