Как сделать сопоставление атрибутов в режиме (мышления) sphinx extended2? - PullRequest
0 голосов
/ 17 сентября 2010

У меня есть это выражение, которое работает, как и ожидалось, в Thinking Sphinx:

Customer.search :with => {:signer_id => 23}

, но мне нужно написать выражение с OR для некоторых атрибутов, например, signer_id = 23 или admin_level - 42, поэтому я переехалв расширенный режим сопоставления и написал это:

Customer.search "@signer_id 23", :match_mode => :extended2

, что, согласно моему пониманию Sphinx, относящегося к документации *1008*, должно быть эквивалентным, но это вообще ничего не соответствует.Есть идеи, что я делаю не так?Как мне написать расширенное выражение мышления сфинкса?

Скопировано и вставлено из консоли:

ruby-1.8.7-p302 > Customer.search(:with => {:signer_id => 23}).count
 => 20 
ruby-1.8.7-p302 > Customer.search "@signer_id 23", :match_mode => :extended2
 => [] 
ruby-1.8.7-p302 > Customer.search("@signer_id 23", :match_mode => :extended2).count
 => 0

Обновление: Исправлен идентификатор (32 -> 23).

Ответы [ 2 ]

0 голосов
/ 18 сентября 2010

Я не вижу в документах раздел, в котором говорится, что вы можете использовать синтаксис @attribute value - это только для полей, а не атрибутов. По крайней мере, это мое понимание. Было бы здорово, если я ошибаюсь:)

0 голосов
/ 17 сентября 2010

Я сделал это для сопоставления полей, которые я нормализовал.Это уменьшает количество оттока в БД, имея тот же текст в полнотекстовом поиске.

Запрос: 'pizza |@product_codes (965 | 1636 | 1848 | 2939 | 4227 | 5067 | 5735) |@brand_codes (1485) |@service_codes (2782)

Обратите внимание, что, как и в другом ответе, вы не можете делать свойства таким образом, это должны быть проиндексированные поля.1008 *

Кроме того, вам необходимо уменьшить количество символов в слове, установив этот параметр

  min_word_len: 1

В противном случае он не будет соответствовать вашим 1- и 2-значным цифровым кодам.

...