/ / Sphinx Daemon zwrócił błąd: błąd zapytania: brak pola - sfinks, myślenie-sfinks

Demon Sphinx zwrócił błąd: błąd zapytania: brak pola - sfinks, myślenie-sfinks

Jeśli teraz skonfiguruj Thinking Sphinx w mojej aplikacji

Wszystko działało dobrze

Dopóki nie zdecyduję się wykonać zapytania dotyczącego warunków w Thinking Sphinx

PartPriceRecord.search "50002" ,:conditions => { :supplier_id =>
"supp50002" },:star => true

i zgłosił mi powyższy błąd

ThinkingSphinx::SphinxError: index part_price_record_core: query
error: no field "supplier_id" found in schema

widząc nawet Ryana Batesa Screencast wydaje się, że spełnia warunki określone w klauzuli „ma„zdefiniowano metodę dla kolumny

coś jak

 has :author_id

Czytanie do jednego z stanowisko autor: Pate Allen (przewiń w dół do dołu)

 :with should be used for attribute filters, and :conditions for
field queries.

więc zmieniam mój powyższy kod z klauzula

PartPriceRecord.search "PartNumber50002",:with => {:supplier_id =>
"supp50002" },:star => true

i nie otrzymuję żadnego wyniku, który jest zły, jak tylko mogę zobacz rekord dla „dostawca_id” dla numeru części „PartNumber50002” w bazie danych

Teraz jestem zdezorientowany

dlaczego pojawia się błąd, a także jaka jest podstawowa różnica pomiędzy "pola" i "atrybut"

może ktoś pomóc

BTW tutaj moja definicja indeksów

 define_index  do
indexes part_number
has supplier_id
end

sphinx_scope(:supplier) { |name|
{:conditions => {:supplier_id => supplier}}
}

Odpowiedzi:

1 dla odpowiedzi № 1

W Sfinksie obecnie można filtrować tylko atrybuty numeryczne. : dostawca_id => „supp50002” sugeruje atrybut ciągu.

Nie rozumiem rubinowego lub myślącego sfinksa. Ale widząc, że sfinks leżący u podstaw nie może tego zrobić, domyślam się, że sfinks myślący na to nie pozwoli.

  • pola, to kolumny tekstowe z oryginalnego zestawu danych. Sphinx indeksuje je i można je wyszukiwać za pomocą głównego „zapytania pełnego tekstu”.

  • Natomiast atrybuty są przechowywane tak, jak jest windeks. Przydają się do retrivial [1], sortowania, grupowania i bezpośredniego filtrowania. Pod warunkiem, że filtrowanie według atrybutów ciągów nie jest obsługiwane. może filtrować według innych atrybutów

[1] Sfinks może zwracać wartości atrybutów w zestawie wyników; podczas gdy pola nie są przechowywane - tylko indeksowane, więc nie można ich odzyskać