2009-07-27 9 views
5

Mam pole firmowe w Indeksie Lucene. Jedna z nazw indeksowanych firm to: Moody'sPrzechowywanie słów z apostrofem w indeksie Lucene

Gdy użytkownik wpisze którekolwiek z poniższych słów kluczowych, chcę, aby ta firma pojawiała się w wynikach wyszukiwania. 1.Moo 2.Mood 3.Moodys 4.Moody na

Jak przechowywać ten wskaźnik w Lucene i jaki rodzaj Lucene Query powinienem użyć, aby uzyskać to zachowanie?

Dzięki.

+0

Odpowiedź zależy od sposobu, w jaki chcesz zbudować resztę indeksu: 1. Czy powinno być reprezentowane plurowanie? tj. są "Apple" i "Jabłka" odrębne? 2. Czy chcesz zachować apostrofy, czy też można je zatrzeć? 3. Czy nazwa firmy wygląda na izolowaną lub w większym polu? –

+0

dziękuję za twoje komentarze ... moja odpowiedź 1.Nie 2. Chcę, żeby Lucene nie trzymał apostrofów 3. Nazwa firmy może pojawić się w izolacji, jak również w większym polu – Jimmy

Odpowiedz

9

podstawie swoich wyjaśnień, chcę podzielić zapytanie na dwie części, a każda z kolei odpowiedzieć:

  1. Jak mogę indeks słów z apostrofami za równoważne podobnych słów bez apostrofu? na przykład mapowanie Moodys i Moody's na ten sam okres indeksu.
  2. Jak zaimplementować wyszukiwanie automatyczne w Lucene - tzn. Podać indeks, znaleźć dokumenty za pomocą prefiksów słów, np. map Moo do Moodys?

1 jest stosunkowo łatwe - Wykorzystanie StandardToeknizer aby utworzyć wyraz łączący apostrof i S z poprzedniego słowa, to StandardFilter usunąć apostrof i s. To przekonwertuje Moody's na Moody. A StandardAnalyzer robi to i wiele więcej (niszczenie i usuwanie słów kluczowych), które mogą być większe niż potrzebujesz. Korzystanie z modułu macierzystego powinno przyjmować zarówno ten sam kod, jak Moodys i Moody. Wypróbuj SnowBallFilter.

2 jest trudniejsze: Lucene's PrefixQuery, do którego Alan nawiązał, działa tylko wtedy, gdy nazwa firmy jest pierwszym słowem na polu. Potrzebujesz czegoś takiego jak odpowiedź na this question about auto-complete in Lucene.

1

StandardAnalyser powinny działać na 3 i 4, jednak nie będzie działać na 1 i 2.

Bez pisania własnych (kompleks) analizator tekstu, to myślę o tym, jak czekasz nazwy firm, aby być szukałem. Na przykład podstawowa składnia wyszukiwania lucenowego oznacza, że ​​możesz znaleźć "Moody's", jeśli szukasz za pomocą symboli wieloznacznych: "Moo *" i "Mood *". Dlatego warto rozważyć dołączenie "*" do wyszukiwanego hasła przed przesłaniem do lucenu, jednak może to spowodować pewne zamieszanie, jeśli użytkownik nie jest świadomy tego dodania symbolu wieloznacznego pod maską.

Powiązane problemy