MiniSearch
解决了需要全文搜索功能的用例 (例如前缀搜索、模糊搜索、排名、字段提升等),但数据 要编制索引的进程内存中可以本地放置。虽然你不会索引 有了整个互联网,就有了它,提供了令人惊讶的许多用例 好吧.通过将索引存储在本地内存中,可以 离线工作,可以快速处理查询,没有网络延迟。MiniSearchMiniSearch
一个突出的用例是在 Web 和移动设备中“边输入边输入”的实时搜索 应用程序,其中将索引保留在客户端上可实现快速响应 UI,无需向搜索服务器发出请求。
MiniSearch
努力公开一个简单的 API,该 API 为 构建自定义解决方案,同时保留一个小型且经过良好测试的代码库。
npm
npm install minisearch
yarn
yarn add minisearch
然后在项目中:require
import
import MiniSearch from 'minisearch'
或
const MiniSearch = require('minisearch')
或者 CDN
<script src="https://cdn.jsdelivr.net/npm/minisearch@6.3.0/dist/umd/index.min.js"></script>
在这种情况下,将在项目中显示为全局变量。MiniSearch
最后,如果要手动构建库,请克隆存储库并运行(或对于缩小版本 + 源映射)。 编译后的源代码将在文件夹(UMD、ES6 和 ES2015 提供模块版本)
基本用法
const documents = [
{
id: 1,
title: 'Moby Dick',
text: 'Call me Ishmael. Some years ago...',
category: 'fiction'
},
{
id: 2,
title: 'Zen and the Art of Motorcycle Maintenance',
text: 'I can see by my watch...',
category: 'fiction'
},
// ...and more
]
let miniSearch = new MiniSearch({
fields: ['title', 'text'], // fields to index for full-text search
storeFields: ['title', 'category'] // fields to return with search results
})
// Index all documents
miniSearch.addAll(documents)
// Search with default options
let results = miniSearch.search('zen art motorcycle')
// => [
// { id: 2, title: 'Zen and the Art of Motorcycle Maintenance', category: 'fiction', score: 2.77258, match: { ... } },
// { id: 4, title: 'Zen and the Art of Archery', category: 'non-fiction', score: 1.38629, match: { ... } }
// ]
MiniSearch
支持多个选项以实现更高级的搜索行为:
// Search only specific fields
miniSearch.search('zen', { fields: ['title'] })
// Boost some fields (here "title")
miniSearch.search('zen', { boost: { title: 2 } })
// Prefix search (so that 'moto' will match 'motorcycle')
miniSearch.search('moto', { prefix: true })
// Search within a specific category
miniSearch.search('zen', {
filter: (result) => result.category === 'fiction'
})
// Fuzzy search, in this example, with a max edit distance of 0.2 * term length,
// rounded to nearest integer. The mispelled 'ismael' will match 'ishmael'.
miniSearch.search('ismael', { fuzzy: 0.2 })
// You can set the default search options upon initialization
miniSearch = new MiniSearch({
fields: ['title', 'text'],
searchOptions: {
boost: { title: 2 },
fuzzy: 0.2
}
})
miniSearch.addAll(documents)
// It will now by default perform fuzzy search and boost "title":
miniSearch.search('zen and motorcycles')