Имеется конфигурация индексов товаров и рубрик использующих эти товары.
На рисунке 1
показаны 4 plain
индекса, которые в кач-ве источника используют csv
файлы.
На рисунке 2
показаны 6 distributed
индексов, которые в кач-ве источника используют либо индекс/ы товаров, либо индекс/ы других рубрик. На данном рисунке 2
цветом обозначены рубрики, которые в кач-ве источника используют индексы товаров такого же цвета.
По непонятной мне причине не создаются индексы для родительских рубрик 4K UHD
и TV
.
Ниже выкладываю bash
скрипт, который быстро позволит создать такую же конфигурацию, создаст csv файлы. Используется официальный докер-образ
и docker-compose
для удобства работы с ним). Получится такая структура:
├── csv
│ ├── fullhd-tv.csv
│ ├── promotion-tv.csv
│ ├── smart-tv.csv
│ └── wifi-tv.csv
├── data
├── docker-compose.yml
├── manticore.conf
#!/bin/bash
manticore_issues_f259_config="searchd
{
listen = 9306:mysql41
listen = /var/run/mysqld/mysqld.sock:mysql41
pid_file = /var/run/manticore/searchd.pid
binlog_path =
# data_dir = /var/lib/manticore
log = /var/log/manticore/searchd.log
query_log_format = sphinxql
}
source products_smarts_tv
{
type = csvpipe
csvpipe_delimiter = ,
csvpipe_command = cat /csv/smart-tv.csv
csvpipe_field_string = name
}
index products_smarts_tv
{
type = plain
source = products_smarts_tv
path = /var/lib/manticore/products_smarts_tv
}
source products_wifi_tv
{
type = csvpipe
csvpipe_delimiter = ,
csvpipe_command = cat /csv/wifi-tv.csv
csvpipe_field_string = name
}
index products_wifi_tv
{
type = plain
source = products_wifi_tv
path = /var/lib/manticore/products_wifi_tv
}
source products_fullhd_tv
{
type = csvpipe
csvpipe_delimiter = ,
csvpipe_command = cat /csv/fullhd-tv.csv
csvpipe_field_string = name
}
index products_fullhd_tv
{
type = plain
source = products_fullhd_tv
path = /var/lib/manticore/products_fullhd_tv
}
source products_promotion_tv
{
type = csvpipe
csvpipe_delimiter = ,
csvpipe_command = cat /csv/promotion-tv.csv
csvpipe_field_string = name
}
index products_promotion_tv
{
type = plain
source = products_promotion_tv
path = /var/lib/manticore/products_promotion_tv
}
index category_smarts_tv
{
type = distributed
local = products_smarts_tv
}
index category_wifi_tv
{
type = distributed
local = products_wifi_tv
}
index category_fullhd_tv
{
type = distributed
local = products_fullhd_tv
}
index category_promotion_tv
{
type = distributed
local = products_promotion_tv
}
index category_4k_tv
{
type = distributed
local = category_smarts_tv
local = category_wifi_tv
local = category_promotion_tv
}
index category_tv
{
type = distributed
local = category_4k_tv
local = category_fullhd_tv
}
"
manticore_issues_f259_docker_compose="version: '2.2'
services:
manticore_issues_f259:
container_name: manticore_issues_f259
image: manticoresearch/manticore
restart: always
ports:
- 127.0.0.1:9306:9376
volumes:
- \${PWD}/data:/var/lib/manticore
- \${PWD}/csv:/csv
- \${PWD}/manticore.conf:/etc/manticoresearch/manticore.conf
"
mkdir -p data && mkdir -p csv;
printf "$manticore_issues_f259_config" > manticore.conf &&
printf "$manticore_issues_f259_docker_compose" > docker-compose.yml
printf "1501,NanoCell телевизор LG 55SM8000PLA 55' Ultra HD 4K\n" > csv/smart-tv.csv &&
printf "1502,Телевизор XIAOMI Mi TV 4S 43' Ultra HD 4K\n" > csv/wifi-tv.csv &&
printf "1500,NanoCell телевизор LG 55SM8000PLA 55' Ultra HD 4K\n1502,Телевизор XIAOMI Mi TV 4S 43 43' Ultra HD 4K\n1503,Телевизор SAMSUNG T32E310EX 31.5' FULL HD\n" > csv/promotion-tv.csv &&
printf "1503,Телевизор SAMSUNG T32E310EX 31.5' FULL HD\n" > csv/fullhd-tv.csv;
Запускаем контейнер docker-compose -f docker-compose.yml up
и делаем ротацию docker-compose -f docker-compose.yml exec --user manticore manticore_issues_f259 indexer --all --rotate
Теперь подключаемся к sphinxQL командой docker-compose -f docker-compose.yml exec --user manticore manticore_issues_f259 mysql -P9306 -h127.0.0.1
и выполняем следующие команды к серверу:
mysql> reload indexes;
mysql> show tables;
+-----------------------+-------------+
| Index | Type |
+-----------------------+-------------+
| category_fullhd_tv | distributed |
| category_promotion_tv | distributed |
| category_smarts_tv | distributed |
| category_wifi_tv | distributed |
| products_fullhd_tv | local |
| products_promotion_tv | local |
| products_smarts_tv | local |
| products_wifi_tv | local |
+-----------------------+-------------+
Не могу понять по какой причине здесь нету двух индексов category_4k_tv
и category_tv
. Хотя для них правила написаны:
index category_4k_tv
{
type = distributed
local = category_smarts_tv
local = category_wifi_tv
local = category_promotion_tv
}
index category_tv
{
type = distributed
local = category_4k_tv
local = category_fullhd_tv
}