JavaScript/TypeScript плагин для преобразования текстового запроса в набор предустановленных фильтров.
Пример использования
import { S3e } from 'smart-search-site-engine'
import type { S3eFilters, S3eThreshold } from 'smart-search-site-engine/dist/types';
// Данные, из которых будет собираться набор фильтров при обработке запроса пользователя
const filters: S3eFilters[] = [
{
name: "clothes",
options: [
{
value: "t-shirt", // строка, число или boolean
descriptions: "футболка"
},
{
value: "pants",
descriptions: "штаны, брюки"
}
]
},
{
name: "material",
options: [
{
value: "cotton",
descriptions: "хлопок, хлопковый" // описания по умолчанию разбиваются по запятым, их не обязательно склонять, за редким исключением (об этом чуть ниже)
},
{
value: "flax",
descriptions: ["лен", "льна", "льняной"] // могут передаваться и массивом, обратите внимание тут идет склонение "льна", чем короче слово, тем больше вероятность, что нужно указать его склонение
}
]
},
{
name: "details",
options: [
{
value: "short_sleeve",
descriptions: "короткий рукав",
},
{
value: "long_sleeve",
descriptions: "длинный рукав",
}
]
}
];
// Настройка срабатывания
const thresholds: S3eThreshold[] = [
{
length: 4, // от 1 до бесконечности
relevance: 50, // от 1 до 100
},
{
length: 6,
relevance: 60,
},
{
length: 10,
relevance: 70,
}
]
/*
Приведенные настройки означают следующее
если длина слова описания будет
<= 4, то слово из описания должно минимум на 50% совпадать из слова из запроса
если < 6 то 50%
если < 10 то 60%
если >= 10 то 70%
*/
const se = new S3e(filters, thresholds); // конструктор может быть пустым
//const se = new S3e(); // так тоже можно
//const se = new S3e(filters); // и так
se.setFilters(filters); // в любой момент времени фильтры можно изменить
se.setThresholds(thresholds); // тоже самое относится и к трешхолдам
//se.setThresholds([]); // так установится дефолтное значение для срабатывания
// В запросе намеренно допущены опечатки
se.find("купить хлопковую футблоку с короктим рукавом")
/*
[
{filter: 'material', value: 'cotton'},
{filter: 'clothes', value: 't-shirt'},
{filter: 'details', value: 'short_sleeve'}
]
*/
// Также есть метод для поиска с полезной для SEO информацией
se.findWithSeoInfo("купить хлопковую футблоку с короктим рукавом")
/*
{
"filters": [
{filter: 'material', value: 'cotton'},
{filter: 'clothes', value: 't-shirt'},
{filter: 'details', value: 'short_sleeve'}
],
"unrecognizedWords": ['купить', 'с'] // список нераспознанных слов в запросе
}
*/npm i smart-search-site-engine
Также существует минифицированная версия