Mam rdzeń z milionami rekordów.
Chcę dodać niestandardową procedurę obsługi, która skanuje istniejące dokumenty i aktualizuje jedno z pól na podstawie warunku (na przykład wiek> 12).
Wolę robić to po stronie serwera Solr, aby uniknąć wysyłania milionów dokumentów do klienta iz powrotem.
Zastanawiam się nad napisaniem wtyczki solr, która otrzyma zapytanie i zaktualizuje niektóre pola w dokumentach zapytania (np. Usuwanie przez program obsługi zapytań).
Zastanawiam się, czy istnieją istniejące rozwiązania lub lepsze alternatywy.
Przez pewien czas szukałem w Internecie i nie mogłem znaleźć przykładów wtyczek Solr, które aktualizują dokumenty (nie muszę rozszerzać programu obsługi aktualizacji).
Napisałem wtyczkę, która używa następującego kodu, który działa dobrze, ale nie jest tak szybki, jak potrzebuję.
Obecnie robię:Jak aktualizować dokumenty Solr po stronie serwera Solr za pomocą niestandardowego programu obsługi/wtyczki
AddUpdateCommand addUpdateCommand = new AddUpdateCommand(solrQueryRequest);
DocIterator iterator = docList.iterator();
SolrIndexSearcher indexReader = solrQueryRequest.getSearcher();
while (iterator.hasNext()) {
Document document = indexReader.doc(iterator.nextDoc());
SolrInputDocument solrInputDocument = new SolrInputDocument();
addUpdateCommand.clear();
addUpdateCommand.solrDoc = solrInputDocument;
addUpdateCommand.solrDoc.setField("id", document.get("id"));
addUpdateCommand.solrDoc.setField("my_updated_field", new_value);
updateRequestProcessor.processAdd(addUpdateCommand);
}
Ale to jest bardzo drogie, ponieważ obsługi Aktualizacja pobierze ponownie dokument, który już trzymać w ręku.
Czy istnieje bezpieczny sposób aktualizowania dokumentu Lucou i zapisywania go z uwzględnieniem wszystkich kodów związanych z Solr, takich jak pamięci podręczne, dodatkowe logiki solr itp.?
Zastanowiłem się nad konwersją do SolrInputDocument, a następnie po prostu dodałem dokument do Solr, ale najpierw muszę przekonwertować wszystkie pola.
Dzięki z góry, Avner
Prawdopodobnie już to wiesz, ale w Solr akt aktualizacji dokumentu naprawdę oznacza zastąpienie oryginalnego dokumentu zaktualizowanym dokumentem zawierającym zmienione wartości. Najczęstszym sposobem obsługi zmian jest przejście z systemu źródłowego do indeksu, zwykle w oparciu o datę lub inne wskazanie; nie aktualizować lokalnie indeksu. Czy możesz podać nieco więcej kontekstu dla tego, co próbujesz zrobić? – icey502
Jestem świadomy usuwania/dodawania rzeczy. W moim scenariuszu istnieją dane, które istnieją tylko w indeksie Solr (pole obliczeniowe). Później muszę dodać trochę danych do pola dla wszystkich dokumentów, które odpowiadają na zapytanie oparte na polach obliczeniowych (w przykładzie pole "Wiek"). Czy to skomplikowane, aby otworzyć pisarza po stronie Solr i zmienić dokumenty? –
Nie miałem do czynienia z tym dokładnym scenariuszem, ale zakładając, że "wyzwalacz" dla zmienionej wartości (i kolejna aktualizacja) sam jest aktualizacją indeksu, może ten link będzie pomocny: http://stackoverflow.com/questions/6593887/solr -and-custom-update-handler – icey502