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 № 1W 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ć