Почему в моем индексе отсутствуют документы с Thinking Sphinx? - PullRequest
4 голосов
/ 07 января 2012

У меня есть простой индекс Thinking Sphinx, определенный на моей Account модели:

define_index do
  indexes display_name
  indexes email_addresses.email_address

  has created_at
  set_property :delta => :datetime, :threshold => 2.minutes
end

(пока игнорируем дельту; я генерирую полный индекс и ищу account_core.)

Но я получаю неожиданные результаты:

>> Account.count
# => 885138

>> Account.search.total_entries
# => 260795

>> Account.search("lenny@paperlesspost.com")
# => []

Однако в командной строке с помощью утилиты search я могу найти Ленни:

$ search -c /etc/sphinx/water.sphinx.conf -i account_core drew@example.com

index 'account_core': query 'drew@example.com.com ': returned 2 matches of 2 total in 0.759 sec

displaying matches:
1. document=3543432, weight=4, sphinx_internal_id=442101, sphinx_deleted=0, class_crc=0, created_at=Mon Apr 11 12:18:08 2011
2. document=5752816, weight=2, sphinx_internal_id=719552, sphinx_deleted=0, class_crc=0, created_at=Tue Dec 27 12:01:12 2011

Действительно, это идентификаторы аккаунта Дрю.

Почему я не могу найти Ленни при поиске с помощью Thinking Sphinx? Почему число total_entries намного меньше, чем общее количество строк в таблице accounts?

1 Ответ

1 голос
/ 07 января 2012

Оказывается, проблема связана с тем, как Thinking Sphinx обрабатывает наследование одной таблицы. TS возвращает только те записи, которые имеют type, что соответствует одному из подклассов родительского класса. Если type равно NULL, документ не включается в результаты поиска. У нас было много записей в таблице accounts с type=NULL. После исправления данных поиск теперь работает как положено.

Спасибо roman3x в #sphinxsearch за указание на это.

...