Class: Index
lunr.Index(attrs)
new Index(attrs)
索引包含所有文档的构建索引,并为索引提供查询接口。
通常,lunr.Index的实例不会使用这个构造函数来创建,相反,应该使用lunr.Builder来构建新的索引,或者使用lunr.Index.load来加载以前构建和序列化的索引。
参数:
| 参数名 | 类型 | 描述 |
|:—-:|:—-:|——|
| attrs | object | 构建搜索索引的属性:
- invertedIndex Object 用于文档引用的术语/字段的索引。
- fieldVectors 字段矢量。
- tokenSet lunr.TokenSet 所有关键词标记的集合。
- fields 索引文档字段的名称。
- pipeline lunr.Pipeline 搜索关键词的管道。|
方法
load(serializedIndex) → {lunr.Index}
加载之前序列化的lunr.Index。
| 参数名 | 类型 | 描述 |
|---|---|---|
serializedIndex |
Object | 之前序列化的lunr.Index |
query(fn) → {}
使用生成的lunr.Query对象对索引执行查询。
如果对索引执行编程查询,则此方法优于lunr.Index#search,从而避免额外的查询解析开销。
生成的查询对象传入提供的函数,该函数用于表示针对索引运行的查询。
注意,尽管这个函数接受一个回调参数,但这并不是异步操作,该回调仅仅是乘车一个自定义的查询对象而已。
| 参数名 | 类型 | 描述 |
|---|---|---|
fn |
lunr.Index~queryBuilder | 用于构建查询的函数。 |
search(queryString) → {}
使用lunr查询语法对索引执行搜索。
结果将按权重分数排序返回,最相关的结果将最先返回。有关如何计算权重分数的详细信息,请参阅指南。
要进行更程序化的查询,请使用lunr.Index#query。
| 参数名 | 类型 | 描述 |
|---|---|---|
queryString |
lunr.Index~queryBuilder | 包含了 lunr 查询语句的字符串。 |
如果传入的查询字符串无法解析则返回lunr.QueryParseError错误。
toJSON() → {Object}
为 JSON 序列化准备索引。
这个 JSON blob 的 schema 将于一个单独的 JSON schema 文件中描述。
类型定义
queryBuilder(query)
查询生成器回调提供一个查询对象,用以表示要在索引上执行的查询。
| 参数名 | 类型 | 描述 |
|---|---|---|
query |
lunr.Query | 要构建的查询对象。 |
QueryString
尽管lunr提供了使用lunr.Query创建查询的能力,但它还提供了一种简单的查询语言,该语言本身可以解析为lunr.Query的一个实例。
对于以编程方式构建的查询,建议直接使用lunr.Query,查询语言最好用于人类输入的文本,而不是程序生成的文本。
它最简单的查询可以只是单个的关键词,例如,“hello”。同时也支持多个关键词,并使用OR进行合并,例如“hello world”将匹配包含“hello”或“world”的文档,尽管包含两个词的结果排名更高。
关键词中可以包含通配符来匹配一个或多个未指定的字符,这些通配符可以插入其中的任何位置,单个关键词中可以存在多个通配符。添加通配符会增加要找到的文档数量,但也可能对查询性能产生负面影响,特别是在词汇开头使用通配符的时候。
关键词可以被限制为特定的字段,如“title:hello”,只有在title字段中有关键词“hello”的文档才会匹配此次查询。使用索引中不存在的字段将导致错误。
也可以将修饰器添加到关键词中,lunr 支持编辑关键词的距离和权重提升。一个关键词的权重提升会使该匹配关键词文档拥有更高的得分,比如“foo^5”。编辑距离也支持模糊匹配。举个例子,“hello~2” 将匹配带有“hello”的编辑距离为2的文档。应该避免过大的编辑距离值,以免影响查询性能。
每个关键词还支持一个状态修饰符。默认情况下,关键词在文档中的存在是可选,但是可以更改为必需或禁止。关键词的必需状态的设定需要在文档中的这个词使用+前缀, 如+foo bar是要求搜索的文档必须包含foo和可选包含bar。反过来-则是设置禁止该关键词存在,即不能出现在一个文档中,例如-foo bar是要求搜索的文档不包含foo但可能包含bar。
我们可以使用反斜杠字符\转义特殊字符,这允许搜索包括通常被认为是修饰符的字符,例如foo\~2将搜索关键词foo~2,而不是搜索关键词foo时将其权重提升到2。
示例
| 查询 | 示例 |
|---|---|
| 简单关键词查询 | hello |
| 多关键词查询 | hello world |
| 字段限定关键词查询 | title:hello |
| 关键词权重为10 | hello^10 |
| 关键词编辑距离为2 | hello~2 |
| 带有状态修饰符的关键词 | -foo +bar baz |
结果
结果为包含匹配搜索查询文档的详细信息的对象。
| 对象属性名 | 类型 | 描述 |
|---|---|---|
ref |
string | 表示文档的引用。 |
score |
number | 0到1之间的数字,表示该文档与查询的相似程度。 |
| matchData | lunr.MatchData | 对于此次匹配的元数据,包括关键词。 |
