2017-06-26 1 views
0

Ich benutze Solr 6.6.0. (Und der Kern wurde mit "Beispiel" erstellt) Wenn ich Rich-Dokument (hier HTML) mit ExtractingRequestHandler importieren, werden unnötiger Zeilenvorschubcode (\ n) und Tabulatorzeichen (\ t) indiziert. Ich habe versucht, MappingCharFilterFactory etc, aber es war unwirksam. Ich habe auch auf die folgende URL verwiesen, aber es gab keinen Effekt. So entfernen Sie n oder t Code in Solr

Wie verhindern Sie, dass Tabs und Newline-Codes (\ n, \ r \ n, \ t) indiziert werden?

[Schritte Ich habe]

  1. Zugang zu "http://localhost:8983/solr/#/sample/documents"
  2. mein Kern wählen (Probe). Und klicken Sie auf den Link "Dokument" im linken Menü.
  3. die Formen

    • test.html
    • Extrahierung Anf Anfrage-Handler "/ update/Extrakt"
    • Dokumenttyp Datei hochladen
    • Documetn (n) füllen. Handler Params * nicht spezifiziert
    • Commit 1000 Innerhalb
    • Überschreiben wahr
  4. Select "text.html" oben und ausführen.

[Antwort]

Status: success 
Response: 
{ 
    "responseHeader": { 
    "status": 0, 
    "QTime": 618 
    } 
} 

[QueryResults]

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":0, 
    "params":{ 
     "q":"*:*", 
     "indent":"on", 
     "wt":"json", 
     "_":"1498437444505"}}, 
    "response":{"numFound":1,"start":0,"docs":[ 
     { 
     "size_d":20.0, 
     "content_type_s":"text/html", 
     "filename_txt_ja":"test.html", 
     "content_txt_ja":" \n \n \n \n \n \n \n \n \n \n \n \n AAA\n\tBBB\n\tCCC\nDDD ", 
     "id":"5a311ac9-77fe-46a6-8524-4ab40c8ece4a", 
     "_version_":1571244755499614208}] 
    } 
} 

Ich möchte diese "\ n" und "\ t" in content_txt_ja Feld disapper.

und hier ist meine Config XML-Dateien

[solrconfig.xml]

<requestHandler name="/update/extract" 
        startup="lazy" 
        class="solr.extraction.ExtractingRequestHandler" > 
    <lst name="defaults"> 
     <str name="lowernames">true</str> 
     <str name="uprefix">ignored_</str> 

     <!-- capture link hrefs but ignore div attributes --> 
     <str name="captureAttr">true</str> 
     <str name="fmap.meta">ignored_</str> 
     <str name="fmap.a">ignored_</str> 
     <str name="fmap.div">ignored_</str> 
     <str name="fmap.a">ignored_</str> 

     <str name="fmap.stream_content_type">content_type_s</str> 
     <str name="fmap.content">content_txt_ja</str> 
     <str name="fmap.body">content_txt2_ja</str> 
     <str name="fmap.stream_name">filename_txt_ja</str> 

     <str name="fmap.author">author_txt_ja</str> 
     <str name="fmap.last_author">last_author_txt_ja</str> 

     <str name="fmap.creation_date">creation_dt</str> 
     <str name="fmap.last_modified">modified_dt</str> 
     <str name="fmap.stream_size">size_d</str> 

    </lst> 
    </requestHandler> 

[Managed-schema.xml]

<dynamicField name="*_txt_ja" type="text_ja" indexed="true" stored="true"/> 
    <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false"> 
     <analyzer> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping.txt"/> 

     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(\\n)" replacement=""/> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\n" replacement=""/> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\\n]" replacement=""/> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\n]" replacement=""/> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\t" replacement=""/> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\\t" replacement=""/> 

     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\\u000a" replacement=" AAA " /> 

     <charFilter class="solr.PatternReplaceFilterFactory" pattern="\u000A" replacement="," /> 
     <charFilter class="solr.PatternReplaceFilterFactory" pattern="\u000D" replacement=";" /> 
     <charFilter class="solr.PatternReplaceFilterFactory" pattern="\u000D\u000A" replacement="." /> 


     <charFilter class="solr.PatternReplaceFilterFactory" pattern="\\u000A" replacement="," /> 
     <charFilter class="solr.PatternReplaceFilterFactory" pattern="\\u000D" replacement=";" /> 
     <charFilter class="solr.PatternReplaceFilterFactory" pattern="\\u000D\\u000A" replacement="." /> 

     <charFilter class="solr.PatternReplaceFilterFactory" pattern="(\\u000A)" replacement="," /> 
     <charFilter class="solr.PatternReplaceFilterFactory" pattern="(\\u000D)" replacement=";" /> 
     <charFilter class="solr.PatternReplaceFilterFactory" pattern="(\\u000D\\u000A)" replacement="." /> 


     <!--<tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>-->  
     <!--<tokenizer class="solr.JapaneseTokenizerFactory" mode="normal"/>--> 
     <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/> 

     <filter class="solr.TrimFilterFactory" /> 

     <!-- Reduces inflected verbs and adjectives to their base/dictionary forms (辞書形) --> 
     <filter class="solr.JapaneseBaseFormFilterFactory"/> 
     <!-- Removes tokens with certain part-of-speech tags --> 
     <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" /> 
     <!-- Normalizes full-width romaji to half-width and half-width kana to full-width (Unicode NFKC subset) --> 
     <filter class="solr.CJKWidthFilterFactory"/> 
     <!-- Removes common tokens typically not useful for search, but have a negative effect on ranking --> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" /> 
     <!-- Normalizes common katakana spelling variations by removing any last long sound character (U+30FC) --> 
     <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/> 
     <!-- Lower-cases romaji characters --> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 
+0

Ich löste dies durch Hinzufügen von "RegexReplaceProcessorFactory" -Konfiguration zu "updateRequestProcessorChain" in solrconfig.xml. Danke @Alessandro –

Antwort

2

Indizierung und Speicherung sind zwei verschiedene Dinge. Um es einfach zu machen: - indizierte Inhalte verwendet wird, suchen auszuführen - wird verwendet, gespeicherte Inhalte in der Suche

zurückzugebenden Ergebnisse

Sie können diese Sonderzeichen aus dem indizierten Inhalte entfernen mit der Analysekette spielen, wie Sie getan (ich habe sie nicht getestet, aber sie können in Ordnung sein). Aber das Entfernen dieser Sonderzeichen aus dem gespeicherten Inhalt (der Inhalt, der in der Antwort zurückgegeben wird) ist eine andere Sache. Sie müssen diesen Inhalt reinigen, bevor er Solr erreicht ODER verwenden Sie ein benutzerdefiniertes Solr-Plugin, um es zur Aktualisierungsanforderung Prozessorzeit zu tun.

Wenn Sie nicht möchten, dass Ihre API-Antwort erreicht wird, können Sie nur die solr-Antwort in Ihrer API-Zwischenschicht löschen und den sauberen Inhalt an den Client zurückgeben.

+0

Vielen Dank sehr leicht zu verstehen, Kommentar. Diese Antwort hat mich gerettet. –

Verwandte Themen