2013-02-28 6 views
3

이 문제에 대한 몇 가지 관련 솔루션을 발견했습니다. 내가 설명 할 것처럼 관련 솔루션이 나를 위해 작동하지 않습니다. (Solr 4.0과 Oracle 11g 데이터베이스에 저장된 색인 데이터를 사용하고 있습니다.)Solr 4.0+를 사용하여 데이터베이스 BLOB로 포함 된 리치 형식의 문서를 어떻게 인덱싱합니까?

Jonck van der Kogel의 관련 솔루션 (2009 년)은 here으로 설명되어 있습니다. 그는 Solr과 함께 제공되는 ClobTransformer와 같은 일종의 사용자 지정 Transformer를 만드는 것에 대해 설명합니다. 이것은 우아한 경로로 내려 가고 있지만 현재 Solr와 통합 된 Tika를 사용하지 않습니다. (그는 외부 PDFBox 및 FontBox를 사용합니다.) 이로 인해 여러 유지 관리/업그레이드 종속성이 만들어집니다. 또한 PDF 이외에도 Word 문서를 인덱싱 할 수 있어야합니다.

Kogel의 솔루션이 올바른 방향에있는 것처럼 보이기 때문에 Solr에 포함 된 Tika 클래스를 사용자 정의 Transformer에 사용하는 방법이 있습니까? 그러면 Kogel의 우아한 데이터베이스 솔루션으로 모든 Tika 기능을 사용할 수 있습니다.

또 다른 관련 솔루션은 Solr과 함께 제공되는 ExtractingRequestHandler (ERH)입니다. 그러나 이름에서 알 수 있듯이 리치 텍스트 문서의 HTTP 게시물을 처리하는 것과 같은 요청 처리기입니다. 이 방법으로 데이터베이스에서 문서를 추출하려면 성능 및 보안 문제가 있습니다. HTTP를 통해 데이터베이스 BLOB에 액세스 가능하게해야합니다. 데이터베이스 BLOB에서 직접 가져 오기에 ERH를 사용하는 것에 대한 논의는 발견하지 못했습니다. Solr Cell을 사용하여 데이터베이스 BLOB에서 직접 가져올 수 있습니까?

또 다른 관련 솔루션은 Byte []를 (DataImportHandler FAQ에서) 문자열로 변환하기 위해 Transformer (Kogel 's 위와 같음)를 작성하는 것입니다. 진정한 바이너리 문서를 사용하면 정크를 색인에 넣고 Tika처럼 텍스트 요소를 제대로 추출하지 않게됩니다. 작동하지 않습니다.

마지막으로 관련 솔루션은 RichDocumentHandler에서 제공하는 UpdateRichDocuments입니다. 이것은 더 이상 사용되지 않으며 Solr에서는 더 이상 사용할 수 없습니다. 페이지는 ExtractingRequestHandler (위에서 언급 한)를 참조합니다.

올바른 해결책은 Tika 클래스를 사용하여 DataImportHandler와 고객 Transformer를 사용하는 것입니다. 이게 어떻게 작동합니까?

답변

4

몇 시간 후 ... 처음에는이 문제에 대해 오도 된 잘못된 정보가 많이 있습니다. 모든 페이지가 한 곳에서 모든 것을 제공하는 것 같지 않았습니다. 정보는 모두 의도적이지만 버전이 다르거 나 머리가 다르기 때문에 문제가 해결되지 않았습니다. 여기에 내가 배운 것과 나의 해결책이있다. 필자는 Solr 4.0 (Tomcat) + Oracle 11g를 사용하고 있습니다.

솔루션 개요 : DataImportHandler + TikaEntityProcessor + FieldStreamDataSource

1 단계, 업데이트 확인하여 solrconfig.xml 그래서 SOLR는 TikaEntityProcessor + DataImportHandler + SOLR 셀 물건을 찾을 수 있습니다.

<lib dir="../contrib/dataimporthandler/lib" regex=".*\.jar" /> 
<!-- will include extras (where TikaEntPro is) and regular DIH --> 
<lib dir="../dist/" regex="apache-solr-dataimporthandler-.*\.jar" /> 
<lib dir="../contrib/extraction/lib" regex=".*\.jar" /> 
<lib dir="../dist/" regex="apache-solr-cell-\d.*\.jar" /> 

2 단계, 당신의 data-config.xml이 BLOB 테이블을 포함하도록 수정합니다. 이 문제에 대한 해결책이 변경되어 버전이 변경된 이후로 가장 어려운 부분입니다. 또한 여러 데이터 소스를 사용하고 올바르게 연결하면 나에게 직관적이지 않았습니다. 한 번 끝내면 매끄러운. IP, SID 이름, 사용자 이름, 비밀번호, 테이블 이름 등을 바꿔야합니다.

<dataConfig> 
    <dataSource name="dastream" type="FieldStreamDataSource" /> 
    <dataSource name="db" type="JdbcDataSource" 
    driver="oracle.jdbc.OracleDriver" 
    url="jdbc:oracle:thin:@192.1.1.1:1521:sid" 
    user="username" 
    password="password"/> 
    <document> 
    <entity 
     name="attachments" 
     query="select * from schema.attachment_table" 
     dataSource="db"> 
     <entity 
     name="attachment" 
     dataSource="dastream" 
     processor="TikaEntityProcessor" 
     url="blob_column" 
     dataField="attachments.BLOB_COLUMN" 
     format="text"> 
     <field column="text" name="body" /> 
     </entity> 
    </entity> 
    <entity name="unrelated" query="select * from another_table" dataSource="db"> 
    </entity> 
    </document> 
</dataConfig> 

중요 사항은 여기를 참조하십시오. 가져 오기를 시도 할 때 "No field available for name : whatever" 오류가 발생하면 FieldStreamDataSource가 지정한 데이터 필드 이름을 확인할 수 없습니다. 필자는 url 특성을 소문자 열 이름과 outer_entity_name.UPPERCASE_BLOB_COLUMN이있는 dataField 특성으로 설정해야했습니다. 또한 일단 열 이름을 잘못 지정하면 문제가 발생할 수 있습니다.

단계 3을 수정하려면 BLOB 열 필드 (및 색인/저장해야하는 다른 열)를 추가하려면 schema.xml을 수정해야합니다. 필요에 따라 수정하십시오. 당신이 SOLR와 색인 데이터베이스 열의에 BLOB로 저장됩니다 이진, 서식있는 텍스트 문서 (일명 다양한 문서)를 받고 많은 시간을 절약에 당신의 방법을 잘해야와

<field name="body" type="text_en" indexed="false" stored="false" /> 
<field name="attach_desc" type="text_general" indexed="true" stored="true" /> 

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

<copyField source="body" dest="text" /> 
<copyField source="body" dest="content" /> 

.

2

티카와 다이 하이드로의 통합은 이미 TikaEntityProcessor

통합을 통해 SOLR 제공된다 - SOLR-1358
의 Blob 처리 - 당신은 딱 맞는 조합을 찾을 필요가 SOLR-1737

합니다.

+0

어떻게 찾지 못했습니까? 어쨌든, 나는 이것이 작동하도록 할 수 있는지를 알기 위해 갈 것이고, 그렇다면 나는 돌아와서 받아 들일 것이다. 감사 – DarkerIvy