2009-10-12 12 views
16

Używam Solr do wyszukiwania mojej aplikacji webowej i pomyślałem, że najlepiej będzie użyć DataImportHandler do obsługi synchronizacji z aplikacją przez bazę danych. Podoba mi się elegancja sprawdzania pola last_updated_date. Dobry towar. Jednak nie wiem, jak obsługiwać usuwanie dokumentów za pomocą tego podejścia. Tak jak ja to widzę, mam dwie możliwości. Mógłbym wysłać wyraźną wiadomość do Solr od klienta, gdy dokument został usunięty, lub mógłbym dodać flagę "usuniętą" i pozostawić obiekt w bazie danych, aby Solr zauważył, że dokument się zmienił i jest teraz "usunięty" . " Mógłbym dodać filtr kwerend, który pomijałby wyniki z usuniętą flagą, ale wydaje się nieskuteczne uwzględnianie wszystkich usuniętych dokumentów w indeksie Lucene. Co robią inni ludzie?Solr DIH - Jak radzić sobie z usuniętymi dokumentami?

Odpowiedz

20

Są to opcje:

  • Zastosowanie DIH special commands $ deleteDocById lub $ deleteDocByQuery (wymaga Solr 1.4+)
  • Użyj clean parameter z DIH usunąć cały indeks przed importem.
  • Użyj preImportDeleteQuery, aby określić, co będzie wyczyszczone przed importowaniem. (wymaga Solr 1.4+)
  • Do zarządzania aktualizowaniem indeksu użyj wyzwalaczy bazy danych zamiast DIH.
  • Jeśli korzystasz z jakiejś formy ORM, użyj funkcji przechwytywania zamiast DIH. Na przykład można użyć hibernate events, aby zaktualizować indeks na temat aktualizacji, wstawiania lub usuwania.
+0

To świetna lista! Nadal używam wersji 1.3, ale jest to przekonujący powód, aby spojrzeć na przełączanie. –

+0

Tak, Solr 1.4 właśnie przeszedł RC, ostateczne wydanie jest nieuchronne. –

+0

Witaj Mauricio, czy są jakieś dobre przykłady użycia preImportDeleteQuery podczas importowania delta na usuniętych dokumentach? – Joyce

2

Chciałbym mieć flagę "usuniętą", więc w rzeczywistości nie usuwam swoich danych! Zależy od tego, jak bardzo jesteś paranoikiem. Lubię sugestie Mauricio ...

+0

"usunięte" flag = Dobre połączenie! – Brian

Powiązane problemy