是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)
現在,您可以查找所有的幹可能來自令牌,然後發現他們在搜索結果中,並相應地突出顯示它們。