就整体速度而言,BulkSearch 优于所有搜索库,并且还提供灵活的搜索功能,如多词匹配、语音转换或部分匹配。它本质上基于 HDD 如何管理文件系统中的文件。添加、更新或删除项目与搜索项目一样快,但也会消耗一些额外的内存。当您的索引不需要经常更新时,FlexSearch 可能是更好的选择。 BulkSearch 还为您提供了一个异步处理模型来在后台执行查询。
基准:
支持的平台:
支持的模块定义:
所有功能:
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
注意:使用bulksearch.min.js进行生产,使用bulksearch.js进行开发。
使用 CDN 的最新版本:
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
在您的代码中包括如下:
var BulkSearch = require ( "bulksearch" ) ;
或者在需要时传入选项:
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
AMD
var BulkSearch = require ( "./bulksearch.js" ) ;
描述 | 批量搜索 | 弹性搜索 |
---|---|---|
使用权 | 读写优化索引 | 读内存优化索引 |
记忆 | 大(每个字约 90 字节) | 很小(每个字约 2 个字节) |
用法 |
|
|
限制结果 | 是的 | 是的 |
分页 | 是的 | 不 |
全局方法:
索引方法:
批量搜索。创建(<选项>)
var index = new BulkSearch ( ) ;
或者你也可以使用:
var index = BulkSearch . create ( ) ;
var index = new BulkSearch ( {
// default values:
type : "integer" ,
encode : "icase" ,
boolean : "and" ,
size : 4000 ,
multi : false ,
strict : false ,
ordered : false ,
paging : false ,
async : false ,
cache : false
} ) ;
阅读更多:拼音搜索、拼音比较、提高内存使用率
指数。添加(id,字符串)
index . add ( 10025 , "John Doe" ) ;
指数。搜索(字符串|选项,<限制|页面>,<回调>)
index . search ( "John" ) ;
限制结果:
index . search ( "John" , 10 ) ;
异步执行查询:
index . search ( "John" , function ( result ) {
// array of results
} ) ;
将参数作为对象传递:
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
指数。更新(id,字符串)
index . update ( 10025 , "Road Runner" ) ;
指数。删除(id)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
指数。初始化(<选项>)
注意:重新初始化也会破坏旧索引!
初始化(使用相同的选项):
index . init ( ) ;
使用新选项初始化:
index . init ( {
/* options */
} ) ;
批量搜索。 addMatcher({正则表达式: 替换})
为所有实例添加全局匹配器:
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
为特定实例添加私有匹配器:
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
在创建/初始化期间定义私有自定义编码器:
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
批量搜索。寄存器(名称,编码器)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
使用全局编码器:
var index = new BulkSearch ( { encode : 'whitespace' } ) ;
私有编码器:
var encoded = index . encode ( "sample text" ) ;
全局编码器:
var encoded = BulkSearch . encode ( "whitespace" , "sample text" ) ;
BulkSearch . register ( 'mixed' , function ( str ) {
str = this . encode ( "icase" , str ) ; // built-in
str = this . encode ( "whitespace" , str ) ; // custom
return str ;
} ) ;
BulkSearch . register ( 'extended' , function ( str ) {
str = this . encode ( "custom" , str ) ;
// do something additional with str ...
return str ;
} ) ;
index . info ( ) ;
返回有关索引的信息,例如:
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
注意:当碎片值约为 50% 或更高时,您应该考虑使用cleanup() 。
优化索引将释放所有碎片内存,并通过评分重建索引。
index . optimize ( ) ;
注意:分页可以简单地将查询时间减少 100 倍。
在初始化时启用分页:
var index = BulkSearch . create ( { paging : true } ) ;
执行查询并传递限制(每页项):
index . search ( "John" , 10 ) ;
响应将包含一个分页对象,如下所示:
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
解释:
“当前的” | 包括指向当前页面的指针。 |
“上一页” | 包括指向上一页的指针。每当此字段的值为null时,就不再有可用的先前页面。 |
“下一个” | 包括指向下一页的指针。每当该字段的值为null时,就没有剩余页面了。 |
“结果” | 匹配项的数组。 |
执行查询并传递指向特定页面的指针:
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
选项 | 价值观 | 描述 |
---|---|---|
类型 | “字节” “短的” “整数” “漂浮” “细绳” | 必须在创建时指定传递的 ID 的数据类型。建议在这里使用尽可能低的数据范围,例如,当 ID 不高于 65,535 时,使用“short”。 |
编码 | 错误的 “情况” “简单的” “先进的” “额外的” 函数(字符串):字符串 | 编码类型。选择内置函数之一或传递自定义编码函数。 |
布尔值 | “和” “或者” | 比较多个单词时应用的布尔模型。注意:使用“or”时,第一个单词也与“and”进行比较。示例:包含 3 个单词的查询,结果有:匹配的单词 1 & 2 和匹配的单词 1 & 3。 |
尺寸 | 2500 - 10000 | 块的大小。这取决于内容长度,哪个值最适合。内容长度较短(例如用户名)的块大小为 2,500 时速度更快。块大小为 10,000 时,文本越大,运行速度越快。注意:建议使用最大内容长度的最小块大小,必须对其进行索引以防止碎片。 |
多 | 真的 错误的 | 启用多字处理。 |
已订购 | 真的 错误的 | 多个单词的顺序必须与匹配条目的顺序相同。 |
严格的 | 真的 错误的 | 精确匹配需要从查询开始。 |
缓存 | 真的 错误的 | 启用缓存。 |
编码器 | 描述 | 误报 | 压缩级别 |
---|---|---|---|
错误的 | 关闭编码 | 不 | 不 |
“情况” | 不区分大小写的编码 | 不 | 不 |
“简单的” | 语音规范化 | 不 | 〜3% |
“先进的” | 语音规范化 + 文字转换 | 不 | 〜25% |
“额外的” | 语音规范化 + Soundex 转换 | 是的 | 〜50% |
参考字符串: “Björn-Phillipp Mayer”
询问 | 弹性搜索 | 批量搜索(iCase) | 批量搜索(简单) | 批量搜索(高级) | 批量搜索(额外) |
---|---|---|---|---|---|
比约恩 | 是的 | 是的 | 是的 | 是的 | 是的 |
比约尔 | 不 | 是的 | 是的 | 是的 | 是的 |
比约恩 | 不 | 不 | 是的 | 是的 | 是的 |
比约恩 | 不 | 不 | 不 | 是的 | 是的 |
菲利普 | 不 | 不 | 不 | 是的 | 是的 |
菲利普 | 不 | 不 | 不 | 是的 | 是的 |
比约恩菲利普 | 不 | 不 | 是的 | 是的 | 是的 |
梅尔 | 不 | 不 | 不 | 是的 | 是的 |
比约恩·迈尔 | 不 | 不 | 不 | 是的 | 是的 |
梅尔·菲利普 | 不 | 不 | 不 | 是的 | 是的 |
拜恩梅尔 | 不 | 不 | 不 | 不 | 是的 |
(误报) | 是的 | 不 | 不 | 不 | 是的 |
注意:必须在创建时指定传递的 ID 的数据类型。建议在这里使用尽可能低的数据范围,例如,当 ID 不高于 65,535 时,使用“short”。
身份证类型 | 值范围 | 每约 100,000 个索引词的内存使用情况 |
---|---|---|
字节 | 0 - 255 | 4.5MB |
短的 | 0 - 65,535 | 5.3MB |
整数 | 0 - 4,294,967,295 | 6.8MB |
漂浮 | 0 - *(16 位数字) | 10兆字节 |
细绳 | *(无限制) | 28.2MB |
作者 BulkSearch:托马斯·威尔克林
许可证:Apache 2.0 许可证