2016-12-01 8 views
1

Мы просим вашей помощи, потому что мы на самом деле застряли :-(Неправильные результаты поиска с Sphinx - Ruby On Rails

Мы сделали большой uppgrade на одном из нашего продукта, который использует поиск Sphinx

Поиск всегда был работая хорошо раньше, но теперь, после того, как результаты обновления абсолютно ошибочны и после многих дней понижения и т. д., мы не можем его решить.

Поиск с или без акцентов должен возвращать сто результатов, но возвращает только несколько результатов . Результаты поиска полные ошибки, акцентированные символы, кажется, заменяют ничего, как будто charset_table игнорировался.

Для того, чтобы получить хорошие результаты для «Hopital» или «Hôpital» мы должны ввести «hpital» ....

Конечно, мы используем charset_table, проиндексировать все таблицы, использовать UTF8 и т.д. .

Прежде чем мы имели рабочий поиск с:

  • Ruby On Rails 1.9.3
  • Sphinx 2.0.10
  • Риддл 1.5.12
  • Думая Sphinx 3.1.4
  • Mysql 5.5.52

Наш сломанный конфигурации является:

  • Рубин на Rails 2.0.0
  • Sphinx 2.2.11
  • Загадка 2.0.0
  • Мышление Sphinx 3.1.4
  • Mysql 5.5.52

Заранее спасибо за все ваши отзывы

ответ

0

Не уверен, что знаю достаточно, чтобы предложить как, чтобы исправить это, но может быть в состоянии объяснить.

Sphinx имеет перезаписанный токенизатор, который по-разному реагирует на недействительные последовательности UTF8.

Раньше недействительные последовательности просто становились «seperators», поэтому вполне возможно, что поиск работал, потому что «hôpital» просто индексируется как «h pital», запрос будет делать то же самое, и поэтому «match».

Но новый токенизатор, «капли» недопустимых последовательностей, поэтому, если «hôpital» получен «искажен», он каким-то образом индексируется как hpital - недопустимые байты исчезли.

(анализатор запросов hasnt изменился, так что теперь ведет себя inconistenly с текстом разбором)

Так что, если как-то индексирование данных UTF не совсем корректно, то поведение будет изменено.Просто не было замечено раньше, потому что это было постоянно неправильно :)

Так что, возможно, убедитесь, что sphinx получает данные правильно из базы данных, МОЖЕТ исправить это? Что-то вроде SET NAMES. Если данные получены в сфинксе, то они должны индексироваться в порядке, в соответствии с charset_table.

+0

Благодарим вас за ответ, мы пробовали это, но никаких изменений в это время – MrOvitch

+0

Проблема решена, спасибо :-) – MrOvitch

 Смежные вопросы

  • Нет связанных вопросов^_^