Когда дело доходит до общей скорости , BulkSearch превосходит все существующие библиотеки поиска, а также предоставляет гибкие возможности поиска, такие как сопоставление нескольких слов, фонетические преобразования или частичное совпадение. По сути, он основан на том, как жесткий диск управляет файлами в файловой системе. Добавление, обновление или удаление элементов происходит так же быстро, как и их поиск, но при этом потребляется некоторая дополнительная память. Если ваш индекс не требует частого обновления, 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 */ } ) ;
АМД
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
} ) ;
Подробнее: Фонетический поиск, фонетическое сравнение, улучшение использования памяти.
Индекс. добавить (идентификатор, строка)
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
}
} ) ;
Индекс. обновление (идентификатор, строка)
index . update ( 10025 , "Road Runner" ) ;
Индекс. удалить (идентификатор)
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
} ) ;
Вариант | Ценности | Описание |
---|---|---|
тип | "байт" "короткий" "целое число" "плавать" "нить" | Тип данных передаваемых идентификаторов должен быть указан при создании. Здесь рекомендуется использовать минимально возможный диапазон данных, например, использовать «короткий», если идентификаторы не превышают 65 535. |
кодировать | ЛОЖЬ "icase" "простой" "передовой" "дополнительный" функция (строка): строка | Тип кодировки. Выберите один из встроенных модулей или передайте собственную функцию кодирования. |
логическое значение | "и" "или" | Применяемая логическая модель при сравнении нескольких слов. Примечание. При использовании «или» первое слово также сравнивается с «и». Пример: запрос из 3 слов, результаты имеют либо совпадающие слова 1 и 2, либо совпадающие слова 1 и 3. |
размер | 2500 - 10000 | Размер кусков. Какое значение подходит лучше всего, зависит от длины контента. Короткая длина контента (например, имена пользователей) выполняется быстрее при размере фрагмента 2500. Текст большего размера выполняется быстрее с размером фрагмента 10 000. Примечание. Рекомендуется использовать минимальный размер фрагмента, равный максимальной длине контента, который необходимо индексировать во избежание фрагментации. |
мульти | истинный ЛОЖЬ | Включите обработку нескольких слов. |
заказал | истинный ЛОЖЬ | Несколько слов должны иметь тот же порядок, что и совпадающая запись. |
строгий | истинный ЛОЖЬ | Соответствия точно нужно начинать с запроса. |
кэш | истинный ЛОЖЬ | Включите кэширование. |
Кодер | Описание | Ложные срабатывания | Уровень сжатия |
---|---|---|---|
ЛОЖЬ | Отключить кодирование | нет | нет |
"icase" | Кодировка без учета регистра | нет | нет |
"простой" | Фонетическая нормализация | нет | ~ 3% |
"передовой" | Фонетическая нормализация + буквальные преобразования | нет | ~ 25% |
"дополнительный" | Фонетическая нормализация + преобразования Soundex | да | ~ 50% |
Справочная строка: «Бьорн-Филипп Майер»
Запрос | ЭластичныйПоиск | Массовый поиск (iCase) | Массовый поиск (простой) | Массовый поиск (расширенный) | Массовый поиск (дополнительно) |
---|---|---|---|---|---|
Бьерн | да | да | да | да | да |
Бьор | нет | да | да | да | да |
Бьёрн | нет | нет | да | да | да |
Бьерн | нет | нет | нет | да | да |
Филипп | нет | нет | нет | да | да |
Филип | нет | нет | нет | да | да |
Бьернфиллип | нет | нет | да | да | да |
Мейер | нет | нет | нет | да | да |
Бьорн Мейер | нет | нет | нет | да | да |
Мейер Филип | нет | нет | нет | да | да |
Бёрн Майр | нет | нет | нет | нет | да |
(ложные срабатывания) | да | нет | нет | нет | да |
Примечание. Тип данных передаваемых идентификаторов должен быть указан при создании. Здесь рекомендуется использовать самый низкий возможный диапазон данных, например, использовать «короткий», если идентификаторы не превышают 65 535.
Тип идентификатора | Диапазон значений | Использование памяти каждые ~ 100 000 проиндексированных слов |
---|---|---|
Байт | 0–255 | 4,5 Мб |
Короткий | 0 – 65 535 | 5,3 Мб |
Целое число | 0 – 4 294 967 295 | 6,8 Мб |
Плавать | 0 - * (16 цифр) | 10 Мб |
Нить | * (без ограничений) | 28,2 Мб |
Массовый поиск авторов: Томас Вилкерлинг
Лицензия: Лицензия Apache 2.0.