2012-01-06 3 views
4

У меня есть простой мышление индекс Sphinx, определенный на моей Account модели: (. Игнор дельты на данный момент, я генерация полного индекса и поиск account_core)Почему мой индекс не хватает документов с Thinking Sphinx?

define_index do 
    indexes display_name 
    indexes email_addresses.email_address 

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

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

>> Account.count 
# => 885138 

>> Account.search.total_entries 
# => 260795 

>> Account.search("[email protected]") 
# => [] 

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

$ search -c /etc/sphinx/water.sphinx.conf -i account_core [email protected] 

index 'account_core': query '[email protected] ': 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 

Действительно, это учетные записи Дрю.

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

ответ

1

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

Благодаря roman3x в #sphinxsearch для указания на меня.

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