lunr.js添加有关索引记录的数据

时间:2015-01-07 19:20:55

标签: javascript lunrjs

lunr.js中,您可以使用.ref()方法添加唯一引用,但我找不到任何方法来添加有关该特定记录的额外数据/信息。是不可能还是我遗漏了一些非常明显的东西。

我甚至尝试将对象分配给ref,但它将其保存为字符串。

修改 现在我将所有内容保存为.ref()中的JSON字符串,该字符串有效,但使用起来非常难看。

1 个答案:

答案 0 :(得分:7)

lunr根本不存储您将其传递给索引的文档,它的索引方式意味着原始文档根本不可用于lunr,因此无法传递和存储与索引关联的元数据对象

更好的解决方案是将您的记录保留在lunr之外,并在获得搜索结果时使用您提供给lunr的引用来提取记录。这样,您可以存储任何您想要的任意元数据。

一个简单的实现可能看起来像这样,它过于简单但你明白了......

var documents = [{
    id: 1,
    title: "Third rock from the sun",
    album: "Are you expirienced",
    rating: 8
},{
    id: 2,
    title: "If 6 Was 9",
    album: "Axis bold as love",
    rating: 7
},{
    id: 3,
    title: "1983...(A Merman I Should Turn to Be)",
    album: "Electric Ladyland",
    rating: 10
}]

var db = documents.reduce(function (acc, document) {
    acc[document.id] = document
    return acc
}, {})

var idx = lunr(function () {
    this.ref('id')
    this.field('title', { boost: 10 })
    this.field('album')
})

documents.forEach(function (document) {
    idx.add(document)
})

var results = idx.search("love").forEach(function (result) {
    return db[result.ref]
})