2011-07-24 15 views
6

Potrzebuję porównać trafność wyników wyszukiwania w różnych zapytaniach Lucene.Lucene: porównaj wyniki dla zapytań

Właściwie mam zestaw dokumentów zindeksowanych i kiedy wyszukiwanie jest wykonywane na tym zestawie, chcę zwrócić nie N najlepsze wyniki z tego zestawu, ale wszystkie wyniki, które pasują do zapytania "wystarczająco dobre".

Parametr "wystarczająco dobry" będzie konfigurowalny (powiedzmy między 0 (dokument jest absolutnie nieistotny) a 1 (dokument jest najlepszym możliwym dopasowaniem)), ale chcę, aby wpływał on na wszystkie zapytania w ten sam sposób.

Z tego, co znalazłem w Internecie, nie jest to proste zadanie. Czy ktokolwiek może mi podpowiedzieć, jak podejść do tego problemu?

Wielkie dzięki!

+0

Nie jesteś pewien co masz na myśli? Czy chcesz zawęzić wyniki zapytania? Łatwo to zrobić z Solr. Z Lucene musisz napisać niestandardowy kolektor: zobacz tutaj http://stackoverflow.com/questions/2871558/remove-results-below-a-certain-score-threshold-in-solr-lucene – Mikos

+0

Dzięki Mikos, ale jak to jest napisane w komentarzu Shashikant Kore tam, wyniki są w stosunku do zapytań, a więc nie mogę użyć tego samego progu do pomiaru "dobroci" wyników w wielu zapytaniach. Patrzę w sposób normalizacji wyników w jakiś sposób, aby te znormalizowane wartości oznaczały to samo pod względem "dobroci" dla wszystkich zapytań. – Serpenty

+0

ahh! Myślę, że lepiej rozumiem twoje pytanie, ale uważam, że bardziej nadaje się do statystyk niż Lucene per se. Może zajść potrzeba sprawdzenia statystyki ANOVA lub Chi-kwadrat w statystykach, a także może pomóc w ustaleniu dopasowania dopasowania między zapytaniami za pomocą tablicy wyników dokumentu wynikowego. HTH. – Mikos

Odpowiedz

0

Jeśli chcesz porównać dwa lub więcej zapytań, znalazłem obejście. Możesz porównać swój najwyżej oceniony dokument z zapytaniem za pomocą klasy LevenstheinDistance lub LuceneLevenstheinDistance (Damerau), aby uzyskać odległość między zapytaniem a Twoim wynikiem.

Wynikiem jest podobieństwo między nimi. Zrób to dla każdego zapytania, które chcesz porównać. Teraz masz narzędzie do porównywania zapytań z podobieństwem kwerendy i najwyższym wynikiem. Możesz teraz wybrać zapytanie o najwyższym wyniku podobieństwa i użyć go do następnych właściwych działań.

//Damerau LevenstheinDistance 
LuceneLevenshteinDistance d = new LuceneLevenshteinDistance(); 

similiarity = d.getDistance(queryterm, yourResult); 
+0

@piyushj Dziękuję za poprawienie mnie btw :) – Blackeye