2012-04-27 18 views
8

Mam dwa dokumenty i używając Luke do zbadania, potwierdziłem w kodzie, że ma to samo zachowanie, używając StandardAnalyzer.Lucene .net Boost nie działa przy użyciu * wildcard

Dokument jeden z doładowania 1

stored/uncompressed,indexed,tokenized<Description:Nummer ett> 
stored/uncompressed,indexed,tokenized<Id:2> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

Dokument dwa z doładowania 2

stored/uncompressed,indexed,tokenized<Description:Nummer två> 
stored/uncompressed,indexed,tokenized<Id:1> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

Szukaj apa w polu Nazwa powraca z doładowania i używane w odpowiedniej kolejności.

Document 2 has Score 1,1891 
Document 1 has Score 0.5945 

wyszukiwania ap * powraca w żadnym porządku i sam wynik

Document 1 Score 1.0000 
Document 2 Score 1.0000 

wyszukiwania apa * powraca w żadnym porządku i sam wynik

Document 1 Score 1.0000 
Document 2 Score 1.0000 

Dlaczego tak jest? Chciałbym zwrócić niektóre dokumenty o wyższej wartości doładowania, nawet jeśli muszę używać symboli wieloznacznych. czy to możliwe?

Pozdrawiam wszystkich fajnych programistów!

Oto, co chcę współdziałać.

Łańcuch wyszukiwania i chcesz dopasować. Używanie symbolu wieloznacznego. Search „Lu” + „*”

Document 
Name 
City 

Chciałbym dokumentu, którego nazwa jest Lund, aby uzyskać wyższą ocenę niż dokument z nazwą Lunt lub miasto jest Lund na przykład. Wynika to z tego, że dowiem się, które dokumenty są najbardziej popularne. Chcę dostać dokumenty z miastem Sztokholm i mam na imię Sztokholm i Stockholmen, ale zamówiłem, jak chcę.

Odpowiedz

10

Od WildcardQuery jest podklasą MultiTermQuery otrzymujesz stały wynik 1.

Jeśli zaznaczysz definicję t.getBoost():

t.getBoost() jest impuls czas wyszukiwania kadencji t w zapytaniu q jako określonym w tekście zapytania (zobacz składnię zapytania) lub ustawionym przez wywołania aplikacji na setBoost(). Zauważ, że tak naprawdę nie ma bezpośredniego interfejsu API dla uzyskania dostępu do zwiększenia liczby jednego słowa w zapytaniu wielowyrazowym, ale raczej wiele terminów jest reprezentowanych w zapytaniu jako obiekty wieloznaczne TermQuery , a więc dostępne jest zwiększenie liczby słów w zapytaniu przez wywołującego getBoost sub-query()

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/search/Similarity.html#formula_termBoost

Możliwym Hack może być ustawienie metody przerobienia parsera zapytanie:

myCustomQueryParser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE) 
+0

jest to odpowiedź ja ha bardzo trudno jest znaleźć zarówno książkę, jak i wyszukiwanie. Dziękuję, znacznie łatwiej będzie rozwiązać problem, wiedząc, jak to działa. – JustusTh

+0

@JustusTh Dobrze wiedzieć, że to ci pomogło. – ZeNo

+0

Pomógł, ale być może nie do końca, będzie pracował nad tym. Myślę, że byłoby to proste, ponieważ mój problem jest czymś, o czym myślę, że wielu by chciało. – JustusTh

Powiązane problemy