2013-05-20 22 views
5

Pracuję nad zapytaniem rozmytym za pomocą Solr, które przechodzi przez repozytorium danych, które mogły mieć błędnie napisane wyrazy lub skrócone słowa. Na przykład repozytorium może mieć nazwę ze słowami "Hlth" (skrócona forma słowa "Zdrowie").Wyszukiwanie rozmyte w Solr

  1. Jeśli wykonam rozmyte wyszukiwanie dla Name:'Health'~0.35, otrzymam wyniki ze słowem "Zdrowie", ale nie "Hlth".
  2. Jeśli wykonuję rozmyte wyszukiwanie dla Name:'Hlth'~0.35, otrzymuję rekordy o nazwach "Zdrowie" i "Hlth".

Chciałbym dostać pierwsze zapytanie do pracy. W moim przypadku użycia bussiness, musiałbym użyć czystych danych, aby zapytać o wszystkie błędne lub skrócone słowa.

Czy ktoś mógłby pomóc i rzucić nieco światła na dlaczego nr 1 rozmyty wyszukiwania nie działa i czy są jakieś inne sposoby osiągnięcia tego samego.

Odpowiedz

4

Używasz zapytań rozmytych w niewłaściwy sposób.

Zgodnie z tym co Mike McCandless mówiąc (http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html):

FuzzyQuery mecze terminów „blisko” do określonego terminu bazowej: określić dozwoloną maksymalną odległość edytować, a wszelkie warunki w tej odległości edycji od podstawy termin (a następnie dokumenty zawierające te terminy) są dopasowane.

Składnia QueryParser jest określenie ~ lub określenie ~ N, gdzie N jest maksymalna dopuszczalna liczba edycji (starszych wersji N jest mylące pływak między 0,0 a 1,0, co przekłada się na odległości równoważnej maks edycji przez skomplikowana formuła).

FuzzyQuery jest dobre dla dopasowania nazw: Mogę szukać mcandless ~ 1 i będzie on pasował McCandless (wkładka C), mcandles (usunąć s), mkandless (zastąpić C z K) i bardzo wielu innych " zamknij "warunki". Z maksymalną odległością edycji 2 można wprowadzić do 2 wstawień, usunięć lub substytucji . Wynik dla każdego meczu jest oparty na odległości edycji tego terminu; więc dokładny mecz jest najwyższy; edytuj odległość 1, niższa; itp

Więc trzeba pisać zapytań jak ten - Zdrowie ~ 2

+0

nie działa! Chciałem dopasować Parkway do Pkwy i na odwrót. Parkway ~ 2 mecze tylko Parkway i Pkwy ~ 2 mecze tylko Pkwy –

+0

@Mysterion: FuzzyQuery nie działa, dlaczego? próbowano = "who is johnn" ~ 0.2 – iNikkz

2

piszesz: "Chciałem, aby dopasować Parkway z Pkwy"

Parkway i Pkwy mieć dystans z 3 edycji. Można to osiągnąć, podporządkowując w "~ 3" dla "~ 2" od pierwszej odpowiedzi, ale dopasowanie rozmyte Solr nie jest zalecane dla wartości większych niż 2 ze względu na wydajność.

Myślę, że najlepszym sposobem podejścia problemu byłoby wygenerowanie słownika kontekstu specyficzne synonimów i zrobić ekspansję czas zapytania.