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

Javascript lunr:返回搜索词的词干,以便我可以在结果中突出显示它,javascript,search,porter-stemmer,lunrjs,Javascript,Search,Porter Stemmer,Lunrjs,我使用lunr执行搜索,目前我从搜索文本区域的值突出显示搜索,但lunr使用词干分析器并返回与完整搜索词不匹配的结果。有没有办法访问Lurn最终搜索的搜索词的词干 // query our lunr index searchResults = _.map(index.search($('#searchInput').val()), function (res) { var uid = res.ref; return mediaList[uid]; }); lunr使用的默认词干

我使用lunr执行搜索,目前我从搜索文本区域的值突出显示搜索,但lunr使用词干分析器并返回与完整搜索词不匹配的结果。有没有办法访问Lurn最终搜索的搜索词的词干

// 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"
但是,我认为这不会帮助您实现您想要的目标,因为您正在搜索的文档中的标记也已进行了词干分析,并且该词干分析是单向操作。例如,在上面的示例中,您不知道还有哪些单词会被词干改为“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)
您现在可以查找stem可能来自的所有标记,然后在结果中找到它们并相应地高亮显示它们