Apache Тика индексирует HTTP-ответ вместо содержимого документа - PullRequest
1 голос
/ 04 февраля 2020

Я использую Solr 8.3 и Tika для индексации содержимого и вложений Wordpress (версия 4.9.7). Серверы Solr и Wordpress находятся в одной внутренней сети компании. Из-за организационного решения я не использую плагины, такие как WP-Solr и другие (все они достаточно хороши).

Я написал data-config. xml и файлы управляемой схемы, и загрузил их зоопарку. Эти файлы обновляются в интерфейсе администратора Solr. Поэтому я создал новую коллекцию под названием wp и проиндексировал некоторые файлы (в интерфейсе администратора Solr я установил диапазон от 0 до 200).

Итак, когда я запрашиваю содержимое, мета-поля правильно индексируются, но поля conteudo_text и text возвращают 301 HTTP-ответ (пример ниже):

{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":18,
    "params":{
      "q":"*:*",
      "start":"0",
      "rows":"1",
      "_":"1580842143627"}},
  "response":{"numFound":500,"start":0,"maxScore":1.0,"docs":[
      {
        "data_alteracao":"2019-09-06T11:05:10Z",
        "conteudo":"Criação",
        "titulo":"Criação",
        "id":"37829",
        "data_publicacao":"2019-09-06T11:04:55Z",
        "url":"http://www.homolog.tjrs.jus.br/static/2019/09/estag-criacao.pdf",
        "conteudo_text":["\nMoved Permanently\n\nThe document has moved here.\n\n\n\nApache Server at www.homolog.tjrs.jus.br Port 80\n\n"],
        "_text_":["\nMoved Permanently\n\nThe document has moved here.\n\n\n\nApache Server at www.homolog.tjrs.jus.br Port 80\n\n"],
        "_version_":1657631228775366656}]
  }}

Мой data-config. xml:

<dataConfig>
    <dataSource 
        type="JdbcDataSource"
        driver="com.mysql.jdbc.Driver" 
        url="jdbc:mysql://mysql-grid-homol.tjrs.gov.br:3306/wordpress"  
        user="usr" 
        password="pwd" 
        name="wpdb"
        batchSize="-1"
        readOnly="true"
    />

    <dataSource
        type="BinURLDataSource"             
        name="url_doc"  
    />

    <document name="docs">
        <entity                 
            dataSource="wpdb"
            name="wp"           
            pk="ID"             
            query="
                SELECT 
                    post.Id ID, 
                    post_title TITULO,
                    IF (post_content = '', post_title, post_content) CONTEUDO, 
                    CONCAT
                    (
                        DATE_FORMAT(post.Post_date, '%Y-%m-%d'),
                        'T',
                        DATE_FORMAT(post.Post_date, '%H:%i:%s'),
                        'Z'
                    ) DATA_PUBLICACAO,                  
                    CONCAT
                    (
                        DATE_FORMAT(post.Post_modified, '%Y-%m-%d'), 
                        'T',
                        DATE_FORMAT(post.Post_modified, '%H:%i:%s'),
                        'Z'
                    )DATA_ALTERACAO, 
                    CONCAT
                    (
                        'http:',
                        guid
                    ) URL
                FROM 
                    wpw_posts post 
                    LEFT JOIN wpw_postmeta postmeta 
                        ON (postmeta.Post_id = post.Id AND postmeta.Meta_key = 'publico') 
                WHERE 
                    post.Post_type IN ('page', 'noticia', 'evento', 'curso', 'sistema', 'classificado', 'discurso', 'attachment') 
                    AND post.post_status = 'inherit'
                    AND post.post_mime_type like 'application%'
                ORDER BY post.Post_date DESC                    
            "                                   
        >
            <field column="ID" name="id"/>
            <field column="TITULO" name="titulo"/>
            <field column="CONTEUDO" name="conteudo"/>                      
            <field column="DATA_PUBLICACAO" name="data_publicacao" dateTimeFormat="DD/MM/YYYY'T'hh:mm:ss"/>
            <field column="DATA_ALTERACAO" name="data_alteracao"  dateTimeFormat="DD/MM/YYYY'T'hh:mm:ss"/>
            <field column="URL" name="url"/>

            <entity 
                name="arquivo"
                dataSource="url_doc"                        
                processor="TikaEntityProcessor"
                url="${wp.URL}"                         
                format="text"   
                onError="continue"  
                extractEmbedded="true"
            >
                <field column="text" name="conteudo_text" />
            </entity>           
        </entity> 
    </document>
</dataConfig>

Моя управляемая схема:

<?xml version="1.0" encoding="UTF-8" ?>

<schema name="v2" version="1.6">


    <field name="id"       type="string"    indexed="true"  stored="true" required="true" multiValued="false" />
    <uniqueKey>id</uniqueKey>


    <field name="titulo"            type="string" indexed="true" stored="true" required="true" />   
    <field name="conteudo"          type="string" indexed="true" stored="true" required="true" />   
    <field name="data_publicacao"   type="date"   indexed="true" stored="true"                 docValues="true"/>
    <field name="data_alteracao"    type="date"   indexed="true" stored="true"                 docValues="true" />
    <field name="url"               type="string" indexed="true" stored="true" required="true" multiValued="false"/>
    <field name="conteudo_text"     type="text"   indexed="true" stored="true" required="true" multiValued="true" default=" "/>

    <field name="text"              type="sem_aspas" indexed="true" stored="true" required="true" multiValued="true"/>

    <field name="_version_"         type="long" indexed="false" stored="false" />
    <field name="_root_"            type="string" indexed="true" stored="false" docValues="false" />        
    <field name="_text_"            type="sem_aspas" indexed="true" stored="true" multiValued="true"/>  


    <!-- primitive types -->
    <fieldType name="integer" class="solr.IntPointField" docValues="true"/>
    <fieldType name="integers" class="solr.IntPointField" docValues="true" multiValued="true"/>

    <fieldType name="long" class="solr.LongPointField" docValues="true"/>
    <fieldType name="longs" class="solr.LongPointField" docValues="true" multiValued="true"/>

    <fieldType name="string" class="solr.StrField" sortMissingLast="true" docValues="true" />
    <fieldType name="strings" class="solr.StrField" sortMissingLast="true" docValues="true" multiValued="true"/>

    <fieldType name="date" class="solr.DatePointField" docValues="true"/>
    <fieldType name="dates" class="solr.DatePointField" docValues="true" multiValued="true"/>

    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
    <fieldType name="booleans" class="solr.BoolField" sortMissingLast="true" multiValued="true"/>

    <fieldType name="float" class="solr.FloatPointField" docValues="true" multiValued="false"/>
    <fieldType name="floats" class="solr.FloatPointField" docValues="true" multiValued="true"/>

    <fieldType name="double" class="solr.DoublePointField" docValues="true" multiValued="false"/>
    <fieldType name="doubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>

    <fieldType name="binary" class="solr.BinaryField"/>


    <copyField source="conteudo_text" dest="_text_" />          

    <fieldType name="sem_aspas" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index"> 
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" format="snowball" />
            <filter class="solr.BrazilianStemFilterFactory"/>                       
        </analyzer>
        <analyzer type="query"> 
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" format="snowball" />
            <filter class="solr.BrazilianStemFilterFactory"/>
            <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>        
        </analyzer>
    </fieldType>

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100" multiValued="true">
        <analyzer type="index">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />           
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

</schema>

Вещи, которые я пытался решить,:

1) Изменить из BinURLDataSource в URLDataSource или FieldStreamDataSource; 2) Включите в определение BinURLDataSource пользователя и пароль с правами доступа к файлам.

Я новый пользователь в технологиях Solr / Lucene и Tika (только для второго проекта), и любая помощь приветствуется. .

С уважением.

...