2013-02-27 6 views
8

Jestem całkiem nowy, Lucene, więc chcieliby uzyskać pomoc od Was :)Lucene i SQL Server - najlepsza praktyka

Wstęp: Obecnie mam dokumentów przechowywanych w SQL Server i chcesz użyć Lucene dla pełnego -text/tag wyszukuje te dokumenty w SQL Server.

Q1) Czy w tym przypadku, aby wyszukać słowo kluczowe na dokumentach, należy wstawić wszystkie te dokumenty do indeksu Lucene? Czy to oznacza, że ​​nastąpi duplikacja danych (jedna w SQL Server i druga w indeksie Lucene?) Może to być sprawa, ponieważ mamy ogromną ilość dokumentów (około 100 GB). Czy to nieuniknione?

Q2) Ponadto każdy dokument ma zestaw tagów (do 3). Lucene jest również dobrym wyborem do wyszukiwania tagów? Jeśli tak, jak to zrobić?

Dzięki,

Odpowiedz

5

Tak, zapewniając przeszukiwanie pełnotekstowe przez Lucene i przechowywania danych za pośrednictwem tradycyjnej bazy jest dobrze obsługiwany architektura. Take a look here, dla krótkiego wprowadzenia. Typową implementacją byłoby indeksowanie wszystkiego, co chcesz wesprzeć w wyszukiwaniu, i przechowywanie tylko unikalnego identyfikatora w indeksie Lucene, i pobieranie wszelkich znalezisk rekordów przez wyszukiwanie z bazy danych, w oparciu o identyfikator. Jeśli chcesz zmniejszyć obciążenie bazy danych, możesz zapisać niektóre informacje w Lucene, aby wyświetlić listę wyników wyszukiwania, i zapytać bazę danych tylko w celu pobrania pełnego dokumentu.

Jeśli chodzi o oszczędność miejsca, będzie pewna miara powielania. Jest to prawdą, nawet jeśli jesteś tylko Lucene. Lucene przechowuje odwrócony indeks używany do wyszukiwania całkowicie oddzielnie od przechowywanych danych. Aby zaoszczędzić miejsce, polecam bardzo dokładne wybieranie danych, które chcesz indeksować, i to, co chcesz zapisać, i móc je później odzyskać. To, co przechowujesz, jest szczególnie ważne dla zaoszczędzenia miejsca w Lucene, ponieważ wartości tylko indeksowane wydają się być w większości przypadków bardzo oszczędne.

Lucene z pewnością może zaimplementować wyszukiwanie znaczników. Prosty sposób, aby go wdrożyć byłoby dodać każdy znacznik do pola swojego wyboru (Zadzwonię jest „tagi”, co wydaje się mieć sens), podczas budowania dokumentu, takich jak:

document.add(new Field("tags", "widget", Field.Store.NO, Field.Index.ANALYZED)); 
document.add(new Field("tags", "forkids", Field.Store.NO, Field.Index.ANALYZED)); 

i mógłbym po prostu dodać wymagany termin do dowolnego zapytania, aby wyszukiwać tylko w obrębie określonego znacznika. Na przykład, gdybym szukał "pewnych rzeczy", ale tylko z tagiem "forkids", mógłbym napisać zapytanie takie jak:

some stuff +tags:forkids 
1

Dokumenty mogą być również przechowywane w Lucene, można pobierać i odwoływać się do nich za pomocą identyfikatora dokumentu.

Proponuję użyć Solr http://lucene.apache.org/solr/ na górze Lucene, jest bardziej przyjazny dla użytkownika i ma wiele zmiennych w polu (dla znaczników) dostępnych domyślnie.

http://wiki.apache.org/solr/SchemaXml

+0

Dzięki za odpowiedź. Czy twoim zdaniem utrzymanie dokumentów tylko w Lucene byłoby ogólną architekturą? czy jest jakikolwiek przypadek utrzymywania danych w bazie danych i lucenie? – soleiljy

+0

Jeśli interesuje Cię tylko rzeczywista treść i niektóre metadane, nie widzę potrzeby korzystania z dodatkowej bazy danych. – Elmer