lunr:返回搜索词的词干,这样我就可以在结果中突出显示它

lunr: Return the stem of the searched terms so I can highlight it within results

本文关键字:结果 就可以 显示 搜索 返回 词干 lunr      更新时间:2023-09-26

我正在使用lunr执行搜索,目前我正在从搜索文本区域的值中突出显示搜索,但lunr使用词干分析器并返回与完整搜索项不匹配的结果。有没有一种方法可以访问lunr最终搜索的搜索词的词干?

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

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)

现在,您可以查找词干可能来自的所有标记,然后在结果中找到它们,并相应地突出显示它们。

相关文章: