10

lunr.jsでは、メソッドを使用して一意の参照を追加できますが、.ref()その特定のレコードに関する追加のデータ/情報を追加する方法が見つかりません。それは不可能ですか、それとも本当に明白な何かが欠けていますか。

オブジェクトを ref に割り当てようとしましたが、文字列として保存されます。

EDIT 今のところ、すべてのコンテンツをJSON文字列として保存してい.ref()ます。これは機能しますが、実際には使いにくいです。

4

1 に答える 1

12

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]
})
于 2015-01-13T20:00:20.290 に答える