Первый шаг — импорт каталога из PostgreSQL. У клиента товары хранились в таблице products с полями: name, description, category, brand, price, attributes (JSONB). Мы создали индексы в обоих движках.
Конфигурация индекса в Manticore через SQL-интерфейс:
-- Подключение через mysql-клиент
mysql -h 127.0.0.1 -P 9306
-- Создание таблицы с real-time индексом
CREATE TABLE products (
id BIGINT,
name TEXT,
description TEXT,
category STRING,
brand STRING,
price FLOAT,
in_stock INTEGER,
rating FLOAT,
created_at TIMESTAMP
) morphology='stem_ru, stem_en, soundex'
min_word_len='2'
charset_table='non_cjk, cjk'
html_strip='1';
Для Elasticsearch — маппинг через JSON API:
curl -X PUT "localhost:9200/products" -H 'Content-Type: application/json' -d '{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"analysis": {
"filter": {
"russian_stemmer": { "type": "stemmer", "language": "russian" },
"english_stemmer": { "type": "stemmer", "language": "english" }
},
"analyzer": {
"product_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase", "russian_stemmer", "english_stemmer"]
}
}
}
},
"mappings": {
"properties": {
"name": { "type": "text", "analyzer": "product_analyzer" },
"description": { "type": "text", "analyzer": "product_analyzer" },
"category": { "type": "keyword" },
"brand": { "type": "keyword" },
"price": { "type": "float" },
"in_stock": { "type": "integer" },
"rating": { "type": "float" }
}
}
}'
Загрузку данных из PostgreSQL в Manticore мы автоматизировали через FEDERATED-таблицу MySQL, что позволило обойтись без промежуточных скриптов.
Оставить комментарий