Writing /home/user/smartcj.com/wiki/data/cache/5/5e535036771d5bdb55c48e4269aa842d.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/user/smartcj.com/wiki/data/cache/5/5e535036771d5bdb55c48e4269aa842d.metadata failed
ru:new_rotation_sphinx
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| ru:new_rotation_sphinx [2019/10/30 08:43] – admin | ru:new_rotation_sphinx [2025/05/05 16:30] (current) – [Mysql Search] admin | ||
|---|---|---|---|
| Line 28: | Line 28: | ||
| * Попросить админа поставить сам sphinx | * Попросить админа поставить сам sphinx | ||
| * создать каталог scj/sphinx | * создать каталог scj/sphinx | ||
| - | * Добавить индекс смарта в конфиг sphinx (так же обычно делает админ). | + | * Добавить индекс смарта в конфиг sphinx (так же обычно делает админ). |
| + | * Запустить индексирование базы (так же делает админ)< | ||
| + | * вам остается только прописать в настройки в сетингах ротации. Настройки можно узнать у админа. | ||
| + | Все. | ||
| + | |||
| + | |||
| + | Надо периодически запускать индексирование базы: | ||
| < | < | ||
| - | source scj | + | indexer --all --rotate |
| - | { | + | </ |
| - | type = mysql | + | |
| - | sql_host = localhost | ||
| - | sql_user = scj_mysql_login | ||
| - | sql_pass = scj_mysql_password | ||
| - | sql_db = scj_db | ||
| - | sql_port = 3306 # optional, default is 3306 | ||
| - | // ====== | + | ===== Sphinx Delta Config |
| - | sql_query = SELECT id, date, tags, alt, description, | + | При создании индекса sphinx делает индекс текущего состояния базы и если после индексирования в базе были какие-либо изменения, то sphinx не найдет новых данных, тк они были добавлены после индексирования. |
| - | | + | |
| - | sql_attr_timestamp = date | + | Логический вывод из этого: надо проводить реиндексацию после каждого изменения в базе, однако проблема в том, что |
| - | sql_attr_uint | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_uint | + | |
| + | Что бы решить эту проблему придумали delta index – это индекс в который попадут измения, | ||
| + | При поиска sphinx будет искать и в основном индексе и в дельта индексе, | ||
| - | // | ||
| - | sql_query = SELECT id, UNIX_TIMESTAMP(activation_date) as date, tags, alt, description, | ||
| - | | ||
| - | sql_attr_timestamp = date | + | Итого : |
| - | sql_attr_uint | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_uint | + | |
| - | // | + | в основную часть, которая у вас уже есть надо добавить после |
| + | sql_query_pre = SET NAMES utf8 | ||
| - | sql_query = SELECT id, crc32(g.gallery_md5) as gallery_md5_crc, | + | строку |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | sql_attr_timestamp = date | + | sql_query_pre |
| - | sql_attr_uint | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_float | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_uint = gallery_md5_crc | + | |
| - | // | + | Теперь надо добавить создание дельта индекса |
| - | sql_query = SELECT id, crc32(g.gallery_md5) as gallery_md5_crc, | + | < |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | sql_attr_timestamp = date | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_float | + | |
| - | sql_attr_uint | + | |
| - | sql_attr_uint = gallery_md5_crc | + | |
| - | sql_attr_multi = uint categories from field; | + | |
| + | source delta : your_name_source | ||
| + | { | ||
| + | sql_query_pre = SET NAMES utf8 | ||
| + | sql_query = SELECT gi.gallery_id, | ||
| + | (SELECT group_concat(tag_name) FROM rot_gal2tag g2t \ | ||
| + | LEFT JOIN rot_tags as t on t.tag_id = g2t.tag_id \ | ||
| + | WHERE g2t.gallery_id = gi.gallery_id) as tags, \ | ||
| + | (SELECT group_concat(tag_id) FROM rot_gal2tag g2t \ | ||
| + | WHERE g2t.gallery_id = gi.gallery_id) as tag_ids, \ | ||
| + | (SELECT group_concat(name) FROM rot_groups | ||
| + | WHERE rot_groups.id in (SELECT group_id FROM rot_gallery_stats1 WHERE rot_gallery_stats1.gallery_id = gi.gallery_id AND group_id != 0) ) as group_names, | ||
| + | | ||
| - | sql_query_info | + | (SELECT group_concat(gss.group_id) FROM rot_gallery_stats1 as gss \ |
| + | WHERE gss.gallery_id | ||
| + | FROM rot_gallery_info AS gi \ | ||
| + | JOIN rot_gallery_data1 AS gd ON gi.gallery_id = gd.gallery_id \ | ||
| + | JOIN rot_gallery_stats1 AS gs ON gs.gallery_id = gi.gallery_id \ | ||
| + | WHERE gi.gallery_id > ( SELECT | ||
| + | AND gallery_status = ' | ||
| + | and gs.best_thumb = ' | ||
| + | | ||
| } | } | ||
| - | index scj_index | + | index delta : your_name_index |
| { | { | ||
| - | source = scj | + | |
| - | path = /path_to_data/scj/sphinx/ | + | path = /your_full_path/data/delta |
| - | docinfo = extern | + | |
| - | morphology | + | |
| } | } | ||
| - | Тут надо заменить: | ||
| - | scj_mysql_login | ||
| - | scj_mysql_password | ||
| - | scj_db | ||
| - | path_to_data | ||
| </ | </ | ||
| - | * Запустить | + | |
| - | * вам | + | Как можно заметить запрос такой же, отличается только наличием в выборке по sphinx_max_gallery_id. |
| + | |||
| + | После этого надо доабвить в крон индексацию новых записей | ||
| + | |||
| + | | ||
| + | |||
| + | После создания индекса надо прописать | ||
| + | |||
| + | и раз в сутки | ||
| + | |||
| + | indexer --rotate --merge your_name_index delta | ||
| Все. | Все. | ||
| - | Надо периодически запускать индексирование базы: | + | |
| + | ===== Search Log ===== | ||
| + | |||
| + | Когда | ||
| + | |||
| + | Для этого добавляем в конфиг сфинкса | ||
| < | < | ||
| - | indexer --all --rotate | + | source search_queries |
| + | { | ||
| + | type = mysql | ||
| + | |||
| + | sql_host = YOUR_HOST | ||
| + | sql_user = USERNAME | ||
| + | sql_pass = PASSWORD | ||
| + | sql_db = DB_NAME | ||
| + | sql_port = 3306 # optional, default is 3306 | ||
| + | |||
| + | sql_query_pre = SET NAMES utf8 | ||
| + | |||
| + | sql_query = SELECT sq_id, search_query, | ||
| + | |||
| + | sql_attr_uint | ||
| + | sql_attr_uint | ||
| + | |||
| + | } | ||
| + | |||
| + | |||
| + | index search_queries_index | ||
| + | { | ||
| + | source = search_queries | ||
| + | path = / | ||
| + | docinfo = extern | ||
| + | morphology | ||
| + | } | ||
| + | |||
| </ | </ | ||
| + | и прописываем в сетингах Sphinx Search Log Index. Теперь этот индекс будет использован для выборки например похожих запросов для поиска, | ||
| + | |||
| + | |||
| + | При этом так же нельзя забывать про реиндексацию. например, | ||
| ===== Sphinx settings ===== | ===== Sphinx settings ===== | ||
| Sphinx Search Index основной индекс | Sphinx Search Index основной индекс | ||
| - | Sphinx Delta Index - дельта индекс, загуглите что такое дельта | + | Sphinx Delta Index - дельта индекс |
| Sphinx Search Log Index | Sphinx Search Log Index | ||
| Line 163: | Line 196: | ||
| Можно так же сортировать результаты поиска по дате (domain/? | Можно так же сортировать результаты поиска по дате (domain/? | ||
| - | |||
| - | В 50 добавился еще вариант сортировки результатов по ctr (domain/? | ||
| Line 177: | Line 208: | ||
| Но конечно лучше всего пройтись по документации sphinx и выбрать параметры для себя. | Но конечно лучше всего пройтись по документации sphinx и выбрать параметры для себя. | ||
| + | |||
| + | |||
| + | ===== Sphinx Reindex ===== | ||
| + | |||
| + | Об этом написано выше, но стоит повторить. Сфинкс - это не магия, он ищет по своему индексу. Свой индекс у него получается когда он проводит индксацию вашей базы. Если вы изменили базу (добавили галер, удалили и тп), а реиндексацию сфинкса не запустили - сфинкс про это не узнает. | ||
| + | |||
| + | Это значит, | ||
| + | ===== Mysql Search ===== | ||
| + | |||
| + | По дефолту для поиска используется конструкция примерно WHERE description LIKE ' | ||
| + | |||
| + | Search fields | ||
| + | |||
| + | If you don't use Sphinx the script will use Mysql | ||
| + | built-in functionality. It's slower so we limit amount of fields | ||
| + | Please, read the last WIKI about the last option. | ||
| + | |||
| + | |||
| + | По дефолту скрипт ищет по в description, | ||
| + | |||
| + | Лучший вариант - это настройка Sphinx о чем рассказано ниже. | ||
| + | |||
| + | Но есть компромисный вариант: | ||
| + | |||
| + | Итого если вы хотите использовать этот вариант, | ||
| + | |||
| + | < | ||
| + | ALTER TABLE `rot_gallery_data1` ADD FULLTEXT ( | ||
| + | `alt` , | ||
| + | `description` | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | И переключить в настройках опцию на поиск FullText. | ||
| + | |||
| + | |||
| + | |||
ru/new_rotation_sphinx.1572425032.txt.gz · Last modified: by admin
