2017-10-23 2 views
0

Ich finde die Lucene Segmente im Backend nicht zusammenfließen und die Segmentanzahl erhöht sich zu viel. Ich änderte die Zusammenführungsrichtlinie von LogByteSizeMergePolicy zu TieredMergePolicySegment Merge in Solr nicht passiert

Ich versuchte, Eigenschaften entsprechend der solr Dokumentation zu ändern, aber dennoch, meine Segmente sind hoch.

Ich benutze Solr 6.1.X. Die Indexdaten werden in HDFS gespeichert.

Mein Index config solrconfig.xml:

<indexConfig> 
    <writeLockTimeout>1000</writeLockTimeout> 
    <commitLockTimeout>10000</commitLockTimeout> 
    <maxIndexingThreads>15</maxIndexingThreads> 
    <useCompoundFile>false</useCompoundFile> 
    <ramBufferSizeMB>1024</ramBufferSizeMB> 
    <mergePolicy class="org.apache.lucene.index.TieredMergePolicy"> 
      <int name="maxMergeAtOnce">10</int> 
      <int name="segmentsPerTier">1</int> 
    </mergePolicy> 
    <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory"> 
      <int name="maxMergeAtOnce">10</int> 
      <int name="segmentsPerTier">10</int> 
    </mergePolicyFactory> 
    <lockType>hdfs</lockType> 
    <deletionPolicy class="solr.SolrDeletionPolicy"> 
     <str name="maxCommitsToKeep">1</str> 
     <str name="maxOptimizedCommitsToKeep">0</str> 
    </deletionPolicy> 
</indexConfig> 

The only way we optimize is by force merging which is IO costly and also takes hours to complete. 

Ich habe eine Gruppe von drei Scherben und Replikationsfaktor als 2.

Kann mir jemand helfen, wohin ich gehe falsch

+0

Um ausführlichere Antwort zu bekommen bitte Info-Stream-Ausgabe in Frage liefern – Ivan

Antwort

0

Theorie

Um zu verstehen, wie merge Politik unter der Haube yo funktioniert Sie können die following post

lesen In wenigen Worten wirkt sich die Zusammenführungsrichtlinie nicht auf die Anzahl der Segmente aus, sondern entscheidet nur, welche Segmente zusammengeführt werden sollen. Die Hauptfrage ist also: Wie viele Segmente haben Sie? Was ist das Problem?

Ein weiterer wichtiger Faktor ist die Anzahl der Indexierungs-Threads - jeder Thread erstellt sein eigenes lokales Thread-Segment. Mit anderen Worten, 15 Threads erstellen 15 Segmente auf der Festplatte.

Bitte beachten Sie, dass die Force-Merge-API verwendet wird - dieser Aufruf ist nicht IO-gedrosselt. So kann es die gesamte E/A auf Ihren Knoten verbrauchen und nichts für die Suche übrig lassen, wodurch Ihr System möglicherweise nicht mehr reagiert.

Praxis

Sie <infoStream>true</infoStream> in Ihrem solrconfig.xml ermöglichen kann, die so etwas wie dies in Solr Log produzieren:

IW: commit: done writing segments file "segments_2" 
    IFD: now checkpoint "_cx(6.6.1):c721" [1 segments ; isCommit = true] 
    IFD: deleteCommits: now decRef commit "segments_1" 
    IFD: delete StoreDirectory.deleteFile: delete file segments_1 
    TMP: findMerges: 1 segments 
    TMP: seg=_cx(6.6.1):c721 size=0.054 MB [floored] 
    TMP: allowedSegmentCount=1 vs count=1 (eligible count=1) tooBigCount=0 
    MS: now merge 
    MS: no more merges pending; now return 

Wo alle Entscheidungen mit informativen Beschreibung für jede Komponente protokolliert:

  • IW - Indexschreiber
  • IFD - Löschrichtlinie
  • TMP - Tiered merge Politik
  • MS - fusionieren Scheduler