Tout le monde sait pourquoi et comment résoudre ce problème, car j'ai des mises à jour et des recherches très occupées en même temps.
Erreur lors de l'ouverture d'un nouveau chercheur.
Dépassement de la limite de maxWarmingSearchers = 2, réessayez ultérieurement
Comme il est bien expliqué ici , vous devez réduire le nombre de commits que vous effectuez ou modifier la valeur de maxWarmingSearchers dans solrconfig.xml (ce qui n’est pas une bonne pratique)
Selon la FAQ de Solr: Que signifie "dépassé la limite de maxWarmingSearchers = X"?
Si vous rencontrez souvent cette erreur, vous pouvez (en théorie) augmenter le nombre Dans votre maxWarmingSearchers, mais cela est risqué si vous ne Êtes sûr de disposer des ressources système (RAM, CPU , etc ...) pour le faire en toute sécurité. Une façon plus correcte de gérer la situation consiste à réduire La fréquence à laquelle vous envoyez des commits.
En réalité, cette erreur signifie que vous effectuez trop souvent des commits et que le cache interne ne peut pas suivre la fréquence à laquelle vous dites "effacez le cache et laissez-moi rechercher avec les nouvelles données". Vous devez diminuer la fréquence à laquelle vous effectuez des commits. Vous trouverez plus d’informations sur ce problème ici dans Optimisation de la recherche presque en temps réel mais l’idée de base est que plus vous utilisez de facettes, plus l’intervalle requis entre les validations est important.
L’une des façons dont j’ai compris est que j’ai arrêté de faire des commits manuels (c’est-à-dire que mon application soumettait les données à solr puis exécutait une demande de validation) et que je mettais solr autocommit .
Voici un exemple:
<!-- 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>
Vous devrez déterminer la longueur de l'intervalle dont vous aurez besoin (c'est-à-dire maxTime
), mais en pratique, chaque fois que j'ajoute plus de recherche à facettes à mon application (ou plus d'index ou ce que vous avez), je dois augmenter l'intervalle.
Si vous avez besoin de plus de recherche en temps réel que la fréquence de ces commits ne le permet, vous pouvez regarder dans Solr soft commit .
Selon le https://wiki.Apache.org/solr/CommitWithin
Il existe plusieurs stratégies de validation dans Solr. Le plus connu est la variable explicite
commits
du client. Ensuite, vous avez AutoCommit, configuré dans solrconfig.xml, qui permet à Solr de valider automatiquementadds
après un certain temps ou nombre de documents, et enfin, il peut y avoir une validation en coulisse lorsque le tampon d’entrée est plein.
Vous pouvez utiliser 'CommitWithin' pour gérer ce problème.
Solr3.5 et plus tard, il peut s'agir de server.add(mySolrInputDocument, 10000);
Dans les versions antérieures, vous pouvez utiliser le code ci-dessousUpdateRequest req = new UpdateRequest();
req.add(mySolrInputDocument);
req.setCommitWithin(10000);
req.process(server);
Cela peut réduire la fréquence à laquelle vous envoyez les commits.