Всем привет!
Столкнулся с проблемой отображения данных из sphinx. Проблема заключается с отображением кириллицы в консоли (именно данных которые приходят из сфинкса). Как ни странно но сходу решить проблему не получилось, гугление тоже не дало результатов. Предполагаю что где-то есть настройка из-за которого данные приходят в "неправильном" формате.
Итак, что имеем:
1. Если получаем данные (по которым строим индекс) напрямую из mysql и выводим в консоль всё ок
2. Если в консоли подключаемся к сфинксу, данные тоже выводятся нормально
3. Если подключаемся через python, получаем данные из сфинкса и выводим в консоль, получаем кракозябры.
Скрипт с простейшим запросом к сфинксу который выводит "кракозябры":# -*- coding: utf-8 -*-
import MySQLdb, MySQLdb.cursors
sphinx_db = MySQLdb.connect(host='127.0.0.1',port=9306,user='',passwd='',db='', charset='utf8', use_unicode = True, init_command='SET NAMES UTF8')
sphinx_cursor = sphinx_db.cursor(cursorclass=MySQLdb.cursors.DictCursor)
mysql_db = MySQLdb.connect(host='127.0.0.1' ,user='*****', passwd='*****', db='*****', charset='utf8')
mysql_cursor = mysql_db.cursor(cursorclass=MySQLdb.cursors.DictCursor)
def main():
# Выводит кракозябры
sql = """SELECT * FROM documents LIMIT 1"""
sphinx_cursor.execute(sql)
sphinx_db.commit()
data = sphinx_cursor.fetchone()
print(data['text'])
# Напрямую из mysql выводит нормально
sql = """SELECT * FROM documents LIMIT 1"""
mysql_cursor.execute(sql)
mysql_db.commit()
data = mysql_cursor.fetchone()
print(data['text'])
if __name__ == '__main__':
main()
Конфигурация сфинкса:common
{
lemmatizer_base = /home/www/sphinx_data/dict
}
source src_documents
{
type = mysql
sql_host = localhost
sql_user = *****
sql_pass = *****
sql_db = *****
sql_port = 3306
sql_query = SELECT id, text FROM documents
sql_query_pre = SET NAMES utf8
sql_query_pre = SET CHARACTER SET utf8
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_field_string = text
}
index documents
{
source = src_documents
path = /home/www/sphinx_data/p1
docinfo = extern
charset_type = utf-8
morphology = stem_en, stem_ru, soundex
min_word_len = 3
enable_star = 1
min_infix_len = 3
wordforms = /home/www/sphinx_data/dict/words.txt
charset_table = 0..9, A..Z->a..z, _, a..z, \
U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+0435, U+451->U+0435, U+02D
}
searchd
{
listen = 127.0.0.1:9306:mysql41
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 30
pid_file = /home/www/sphinx_data/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
}
Подскажите в какую сторону копать.