2011-09-22 17 views

Odpowiedz

16

jak jest to dobrze wyjaśnione here należy zmniejszyć liczbę zobowiązuje się dokonać, albo zmienić wartość maxWarmingSearchers w solrconfig.xml (co nie jest dobra praktyka)

+4

Dlaczego ta praktyka nie jest dobra? – TTT

+2

Mówią: "to ryzykowne zadanie, chyba że masz pewność, że masz zasoby systemowe (pamięć RAM, procesor itp.), Aby zrobić to bezpiecznie" dobrze, ale skąd wiesz, że masz wystarczająco dużo zasobów? – lizzie

+0

OK. Ja również się nad tym zastanawiałam, a instrukcja użytkownika mówi: "Jeśli wystąpi ten błąd nieczęsto z powodu fluke sytuacji, prawdopodobnie będziesz ok po prostu ignorując to." – TTT

16

jak na Solr FAQ: What does "exceeded limit of maxWarmingSearchers=X" mean?

Jeśli wystąpi ten błąd dużo, można (teoretycznie) zwiększenie liczby ja n your maxWarmingSearchers, ale jest to ryzykowne, chyba że masz pewność, że zasoby systemowe (pamięć RAM, procesor itp.) są bezpieczne. Poprawniejszym sposobem radzenia sobie z sytuacją jest zmniejszenie liczby wysyłanych zatwierdzeń o .

Co ten błąd oznacza, że ​​jest to w zasadzie co zobowiązuje zbyt często, a wewnętrzna pamięć podręczna nie może nadążyć z częstotliwością mówisz „wyczyścić pamięć podręczną i pozwól mi szukać z nowych danych”. Musisz zmniejszyć częstotliwość, którą popełniasz. Więcej informacji na temat tego problemu można znaleźć tutaj: Near Realtime Search Tuning, ale podstawową zasadą jest to, że im więcej elementów, tym większy interwał, jaki będzie potrzebny między zatwierdzeniami.

Jednym ze sposobów obejścia tego problemu było zatrzymanie wykonywania ręcznych zatwierdzeń (tj. Wysłanie przez moją aplikację danych do Solr, a następnie wykonanie żądania zatwierdzenia) i włączenie solr autocommit.

Oto przykład:

<!-- solrconfig.xml --> 
<autoCommit> 
    <maxDocs>10000</maxDocs> <!-- maximum uncommited docs before autocommit triggered --> 
    <maxTime>15000</maxTime> <!-- maximum time (in MS) after adding a doc before an autocommit is triggered --> 
    <openSearcher>false</openSearcher> <!-- SOLR 4.0. Optionally don't open a searcher on hard commit. This is useful to minimize the size of transaction logs that keep track of uncommitted updates. --> 
</autoCommit> 

Będziesz musiał dowiedzieć się, jak duże przedziału trzeba (tj maxTime), ale w praktyce za każdym razem dodam więcej aspektach wyszukiwanie do mojego wniosku (lub więcej indeksów lub co masz) Muszę zwiększyć interwał.

Jeśli potrzebujesz więcej wyszukiwania w czasie rzeczywistym niż częstotliwość tych zatwierdzeń pozwoli Ci zajrzeć do Solr soft commits.

+0

Świetna odpowiedź. Również czytam z' solrconfig.xml', że zamiast włączania autoCommit, rozważ użycie "commitWithin" podczas dodawania dokumentów. Czytaj więcej [tutaj] (http://wiki.apache.org/solr/UpdateXmlMessages#Passing_commit_and_commitWithin_parameters_as_part_of_the_URL) – Stanley

0

Jak na https://wiki.apache.org/solr/CommitWithin

Istnieje wiele strategii popełnić w Solr. Najbardziej znany jest wyraźny commits od klienta. Następnie masz AutoCommit, skonfigurowany w solrconfig.xml, który pozwala Solr automatycznie zatwierdzać adds po upływie określonego czasu lub liczby dokumentów, a na końcu może nastąpić zatwierdzenie "za kulisami", gdy bufor wejściowy zostanie zapełniony.

Możesz użyć polecenia "CommitWithin", aby rozwiązać ten problem.
Solr3.5 i później, może być server.add(mySolrInputDocument, 10000);
We wcześniejszych wersjach, możesz skorzystać z poniższego kodu
UpdateRequest req = new UpdateRequest(); req.add(mySolrInputDocument); req.setCommitWithin(10000); req.process(server);
może zmniejszyć często wysyłasz zobowiązuje.

Powiązane problemy