PJCHENder 未整理筆記

[npm] fuse.js 搜尋引擎

2020-06-19

[npm] fuse.js 搜尋引擎

基本使用

要被搜尋的內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const list = [
{
title: "Old Man's War",
author: {
firstName: 'John',
lastName: 'Scalzi',
},
},
{
title: 'The Lock Artist',
author: {
firstName: 'Steve',
lastName: 'Hamilton',
},
},
];

使用 fuse

  • keys 指定到的位置一定要是「字串」,否則不會得到任何結果
1
2
3
4
5
6
7
8
9
10
11
const options = {
keys: ['title', 'author.firstName'],
includeMatches: true,
};

const fuse = new Fuse(list, options);

// Change the pattern(使用者輸入的內容)
const pattern = '';

return fuse.search(pattern);

建立索引(Indexing)

indexing @ fuse.js

Fuse 在起始化時如果沒有提供索引會自動生成索引,但當要搜尋的內容太多時,可以手動先建立索引,以加快初始化的速度

產生索引檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const books = [
{
/* ... */
},
];
const options = { keys: ['title', 'author.firstName'] };

// 建立索引
const fuseIndex = Fuse.createIndex(options.keys, books);

// 寫成 JSON 檔
fs.writeFileSync('./fuse-index.json', JSON.stringify(fuseIndex.toJSON()));

// 或直接使用
const fuse = new Fuse(books, options, myIndex);

讀取索引檔

1
2
3
4
5
6
7
// 當 App 啟動時
// 載入 JSON 檔
const fuseIndex = await require('fuse-index.json');
// deserialize JSON
const myIndex = Fuse.parseIndex(searchIndex);

const fuse = new Fuse(books, options, myIndex);

其他說明

掃描二維條碼,分享此文章