Механизм поиска в Choices.js построен как многоуровневая система фильтрации и ранжирования, в которой участвуют как собственные настройки библиотеки, так и интегрированный алгоритм нечеткого поиска. Поведение поиска определяется набором конфигурационных параметров, влияющих на момент активации поиска, область индексирования, чувствительность к вводу и итоговую выдачу результатов.
searchEnabled определяет наличие поисковой строки и самой логики поиска внутри компонента.
searchEnabled: true
При значении false список работает как статический
селектор без фильтрации. В этом режиме все элементы отображаются
одновременно, а ввод пользователя игнорируется.
При true активируется фильтрация элементов, основанная
на строке поиска и алгоритме сопоставления.
searchChoices управляет тем, какие элементы участвуют в поиске.
searchChoices: true
true — поиск выполняется по списку доступных вариантов
(choices)false — поиск отключается даже при включённом
searchEnabledЭтот параметр важен в сценариях, где список динамически дополняется через API, и требуется ограничить поиск только локальными данными.
searchFloor задаёт минимальное количество символов, после которого начинается фильтрация списка.
searchFloor: 2
Поведение:
Типичный диапазон значений — от 0 до 3.
Нулевое значение означает мгновенный запуск поиска с первого
символа.
searchResultLimit регулирует максимальное число элементов, возвращаемых после фильтрации.
searchResultLimit: 10
Алгоритм поиска может находить большое количество совпадений, особенно при использовании нечеткого сопоставления. Ограничение результата выполняет две функции:
Если значение не задано, отображаются все найденные элементы.
searchFields определяет структуру данных, по которым выполняется сравнение.
searchFields: ['label', 'value']
Choices.js хранит каждый элемент как объект, содержащий как минимум:
label — отображаемый текстvalue — значение элементаcustomProperties — пользовательские метаданныеНастройка searchFields позволяет указать, какие из этих
полей учитываются при поиске.
Примеры поведения:
label подходит для UI-ориентированных
списковvalue полезно при кодированных
справочникахcustomProperties позволяет искать по
дополнительным атрибутам (например, категории, идентификаторы,
теги)Внутренний механизм поиска Choices.js основан на нечетком сравнении строк и концепции взвешенного совпадения. В современных версиях используется интеграция с библиотекой Fuse.js, которая отвечает за:
fuseOptions передаёт конфигурацию непосредственно в Fuse.js.
fuseOptions: {
threshold: 0.3,
distance: 100,
ignoreLocation: true
}
Основные параметры:
threshold — уровень строгости совпадения
0.0 — только точные совпадения1.0 — максимально свободное сопоставлениеdistance — максимальная дистанция между совпадаемыми символами
ignoreLocation — игнорирование позиции совпадения в строке
Дополнительно могут использоваться:
minMatchCharLength — минимальная длина совпаденияkeys — ключи объектов для поиска (частично пересекается
с searchFields)По умолчанию результаты сортируются по релевантности, определяемой алгоритмом поиска. Однако итоговый порядок может зависеть от:
shouldSortЕсли сортировка отключена, результаты могут возвращаться в порядке исходного массива, что используется в случаях, когда важна фиксированная последовательность элементов.
Поисковый механизм выполняет нормализацию строк перед сравнением:
Это позволяет корректно обрабатывать языки с акцентами и специфическими символами, снижая зависимость от точного совпадения символов.
При отсутствии введённого значения поле поиска не фильтрует список. Все доступные элементы остаются видимыми, если не включены дополнительные ограничения.
При очистке строки поиска происходит:
На производительность влияют несколько факторов:
searchFieldsfuseOptionssearchResultLimitПри больших наборах данных (1000+ элементов) критически важны:
searchFloorПоисковый процесс в Choices.js можно рассматривать как последовательность этапов:
searchEnabled)searchFloor)searchChoices)searchFields)fuseOptions)searchResultLimit)Каждый этап влияет на итоговую выдачу и может изменять как состав результатов, так и их порядок.
Choices.js допускает расширение стандартного поведения через переопределение поисковых параметров и внедрение пользовательской конфигурации Fuse.js.
На практике это используется для:
Такая гибкость делает поисковый модуль не просто фильтром, а полноценным ранжирующим механизмом внутри UI-компонента.