2010-08-20 11 views
5

Używam Django filtr kwerendy __search aby przeprowadzić wyszukiwanie pełnotekstowe tu npDjango pełny porządek wyszukiwanie tekstu według trafności

MyModel.objects.filter(title__search = 'some title') 

Jak mogę zmusić go zamówić według trafności, a obecnie wydaje się być zamawiania alfabetycznie ?

W szczególności chciałbym, aby wyniki wyszukiwania, w których tytuł był some title pojawiały się najpierw przed czymś, co miało tytuł a different but contains some title.

edit:

Co zauważyłem jest to, że w definicji modelu dla MyModel mam:

class Meta: 
    ordering = ['title'] 

Jeśli usunąć to wtedy staje się zamawianie poprawne tj posortowane według trafności. Czy istnieje sposób, w jaki mogę pozostawić to w definicji modelu jako przydatne gdzie indziej, ale następnie w moim zapytaniu powiedzieć, aby to zignorować?

+1

Nie wierzę, że to naprawdę zamawiać nadzieję. Tylko według porządku naturalnego, jak wskazano, jest to wyszukiwanie logiczne. –

+1

Powtórzę komentarz Enrico: biorąc pod uwagę odpowiedź, którą zaakceptowałeś, wydaje się, że nadal nie możesz zrozumieć, że twoje wyniki są rzeczywiście uporządkowane według trafności, jeśli usuniesz tytuł. Tak nie jest: nie ma znaczenia dla porządku przez, dostaniesz je według kolejności, którą baza danych zdecyduje, żeby ci je podać. –

Odpowiedz

0

Wypróbuj: Model.objects.all().order_by().search() - dzwoniąc pod numer order_by without any parameters does no ordering at all.

Poza tym: zarekwiruję zalecenie Carla dotyczące stogu siana, szczególnie, że pozwala na bardziej skomplikowane rzeczy, jak na przykład "taniec", który pasuje do "tańców", "tancerzy" i "tańczących"), faceting ("Pokaż mi user & liczba trafień dla każdego wyniku wyszukiwania "), pobieranie obiektów podobnych do tego, który aktualnie wyświetlasz, itp. Kiedy ostatnio próbowałem Whoosh był niestabilny (tj. rozbił się podczas indeksowania), ale trwało to dość krótko czas na odpalenie Solr, co jest świetne.

+0

Ostatnio miałem sporo szczęścia z Whoosh. Ale nie robi to wszystkich wymyślnych rzeczy: "tak", "faceting no" :( –

+0

Muszę zauważyć, że moje doświadczenie z Whoosh było krótkie i około rok temu. Słyszałem, że jest stabilne, ale tak naprawdę nie potrzebowałem go, odkąd już potrzebował Solr z różnych powodów (faceting, wsparcie dla wielu języków). –

3

Jak zauważyliśmy here, wyszukiwanie to Boolean.

Nie ma takiego współczynnika istotności współczynnika używanego do zamawiania.

A głupi pomysł można zamawiać według długości tytułu, co może mieć sens.

2

Najprostszym sposobem, aby uzyskać dobre wyszukiwania pełnotekstowego w projekcie Django jest użycie doskonałą Haystack aplikację. Jest śmiesznie łatwy w konfiguracji, szczególnie jeśli używasz najprostszego mechanizmu wyszukiwania (Whoosh, który jest czystym pythonem). Możesz ustawić indeksowanie pełnotekstowe treści, wyniki uporządkowanych według istotności i wiele innych ciekawych funkcji w ciągu kilku minut. A jeśli przerosniesz ograniczenia wydajności/współbieżności/funkcji Whoosh, ponieważ używasz Stogu Siana, aby wyodrębnić funkcje wyszukiwania, możesz zamienić coś w rodzaju Who2 w dowolnej chwili na Solr.

0

Możesz to osiągnąć, używając surowego wyszukiwania z klauzulą ​​ORDER BY dla trafności przy użyciu Django> = 1.2

File.objects.raw(query_string, params[x,y,z]) 

Chociaż raw_querset ma swoje wady, na przykład nie obsługuje count() na przykład.

Uważa jednak przywrócić modele więc jest dość łatwy w użyciu, choć nie tak proste, jak __search

Powiązane problemy