2013-12-05 2 views
1

Я установил одноядерный solr (4.6.0), и я пытаюсь индексировать документы на нескольких языках. Я сконфигурировал solr для автоматического определения языка документа, но всегда устанавливает язык по умолчанию (настроен в langid.fallback параметр).Solr не распознает язык автоматически

Это то, что я написал в solrconfig.xml, чтобы определить язык:

и

<updateRequestProcessorChain name="langid"> 
     <processor class="org.apache.solr.update.processor.LangDetectLanguageIdentifierUpdateProcessorFactory"> 
     <str name="langid.fl">text,title,description,content</str> 
     <str name="langid.langField">language_s</str> 
     <str name="langid.fallback">en</str> 
     </processor> 
     <processor class="solr.LogUpdateProcessorFactory" /> 
     <processor class="solr.RunUpdateProcessorFactory" /> 
    </updateRequestProcessorChain> 

После загрузки документа, вот это то, что появляется в журнале:

248638 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – LangId configured 
248639 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – Language fallback to value en 
248639 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – Appending field text 
248639 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – Appending field title 
248639 [qtp723484867-14] WARN org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – Field title not a String value, not including in detection 
248640 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – Appending field description 
248640 [qtp723484867-14] WARN org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – Field description not a String value, not including in detection 
248640 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – Appending field content 
248640 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – No input text to detect language from, returning empty list 
248641 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – No language detected, using fallback en 
248641 [qtp723484867-14] DEBUG org.apache.solr.update.processor.LanguageIdentifierUpdateProcessor – Detected main document language from fields [Ljava.lang.String;@6efbb783: en 

С моей точки зрения, LanguageIdentifie rUpdateProcessor не может обработать solr.TextField поля для определения языка, но я не видел этого ограничения в любой документации. Кроме того, я видел несколько примеров в книгах, и оба они используют текстовые поля (а не строковые поля) для определения языка. И, я не знаю почему, но поля текст и содержание не принимаются во внимание.

Может ли кто-нибудь указать мне в правильном направлении?

Здесь есть определение поля этих полей:

<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/> 
<field name="description" type="text_general" indexed="true" stored="true"/> 
<field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/> 

Спасибо!

ответ

4

Мне это удалось, позвонив по телефону /update/extract.

В solrconfig.xml:

<!-- Solr Cell Update Request Handler 
    http://wiki.apache.org/solr/ExtractingRequestHandler 
--> 
<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.a">ignored_</str> 
    <str name="fmap.div">ignored_</str> 

    <str name="update.chain">langid</str> 
    </lst> 
</requestHandler> 

В коде Java:

// Upload pdf content 
    ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract"); 
    up.setParam("literal.id", doc.getId().toString()); 
    up.setParam("literal.title", doc.getTitle()); 
    up.setParam("literal.description", doc.getDescription()); 
    up.addFile(new java.io.File(doc.getFile().getFilePath()), doc.getProcessedFile().getFile() 
     .getMimeType()); 
    up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); 
    solrServer.getServer().request(up); 

Таким образом, язык документа прекрасно обнаруженным.

Надеюсь, это поможет кому-то!

+0

Кроме того, я добавил цепочку обновлений в/update/extract, а также с конфигурацией updateRequestProcessorChain. Тем не менее он не работает. Есть ли что-то необходимое дополнительно. – Nitul

0

Я использую 6.1.0, на самом деле они сделали/обновили работы, и/update/extract больше не работает.

+0

Не работает. – Nitul

Смежные вопросы