Полнотекстовый поиск на стороне клиента на основе js-поиска, но с добавленной поддержкой веб-работников для повышения производительности.
Проверьте поиск примера интеграции.
Или установите его самостоятельно с помощью NPM:
npm install --save js-worker-search
Эта утилита, созданная на основе поиска JS, создает поисковый индекс и выполняет фактический поиск. Он автоматически определяет возможности текущей среды (браузера или узла) и, когда это возможно, использует реализацию на основе веб-работника. Если поддержка веб-работников недоступна, поиск выполняется в основном потоке (UI).
SearchApi определяет следующие общедоступные методы:
constructor ({ caseSensitive, indexMode, tokenizePattern })
По умолчанию SearchApi
создает индекс для соответствия всем подстрокам. Это поведение можно переопределить, передав именованный параметр indexMode
. Допустимые значения: INDEX_MODES.ALL_SUBSTRINGS
, INDEX_MODES.EXACT_WORDS
и INDEX_MODES.PREFIXES
.
По умолчанию поиск нечувствителен к регистру и разделяется на все пробельные символы. Прочтите ниже дополнительную информацию о настройке параметров по умолчанию.
indexDocument (uid, text)
Добавляет или обновляет идентификатор пользователя в индексе поиска и связывает его с указанным текстом. Обратите внимание, что в настоящее время uid можно только добавлять или обновлять в индексе, но не удалять.
Параметры:
search(query)
Ищет в текущем индексе указанный текст запроса. Принимаются только идентификаторы, соответствующие всем словам в тексте. Если указана пустая строка запроса, будут возвращены все индексированные идентификаторы uid.
Поиск документов осуществляется без учета регистра (например, «поиск» будет соответствовать «Поиск»). При поиске документов используется сопоставление подстрок (например, «na» и «me» будут соответствовать «name»).
Параметры:
Этот метод вернет массив uids.
terminate()
Если поиск выполняется в веб-воркере, это приведет к его прекращению, чтобы разрешить сборку мусора.
Используйте API следующим образом:
import SearchApi from 'js-worker-search'
const searchApi = new SearchApi ( )
// Index as many objects as you want.
// Objects are identified by an id (the first parameter).
// Each Object can be indexed multiple times (once per string of related text).
searchApi . indexDocument ( 'foo' , 'Text describing an Object identified as "foo"' )
searchApi . indexDocument ( 'bar' , 'Text describing an Object identified as "bar"' )
// Search for matching documents using the `search` method.
// In this case the promise will be resolved with the Array ['foo', 'bar'].
// This is because the word "describing" appears in both indices.
const promise = searchApi . search ( 'describing' )
По умолчанию SearchApi
создает индекс для соответствия всем подстрокам. Вы можете переопределить это поведение, передав конструктору параметр indexMode
следующим образом:
import SearchApi , { INDEX_MODES } from 'js-worker-search'
// all-substrings match by default; same as current
// eg "c", "ca", "a", "at", "cat" match "cat"
const searchApi = new SearchApi ( )
// prefix matching (eg "c", "ca", "cat" match "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . PREFIXES
} )
// exact words matching (eg only "cat" matches "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS
} )
По умолчанию SearchApi
разбивает текст на слова (токенизирует), используя пробелы и символы новой строки в качестве разделительных символов. Если вы хотите предоставить собственное правило разделения, передайте RegExp конструктору, определяющему шаблон, например:
// Custom tokenizer pattern to include all non alphanumerics as delimeters
// ex: searching "Swift" matches "Thomas Swift" and "Thomas (Swift)" but not "swiftly tilting"
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS ,
tokenizePattern : / [^a-z0-9]+ / ,
} )
Дезинфицирующее средство по умолчанию выполняет поиск без учета регистра. Если вы хотите переопределить это поведение и выполнить поиск с учетом регистра, установите для бита caseSensitive значение true, например:
// custom sanitizer for case-sensitive searches
const searchApi = new SearchApi ( {
caseSensitive : true
} )
По умолчанию утилита поиска возвращает только документы, содержащие каждый токен поиска. Его можно настроить на возврат документов, содержащих любой токен поиска.
// Change search behavior from AND to OR
const searchApi = new SearchApi ( {
matchAnyToken : true
} )
Изменения отслеживаются в журнале изменений.
js-worker-search доступен по лицензии MIT.