Solr Dataimport配置

參考資料:css

https://cwiki.apache.org/confluence/display/solr/Uploading+Structured+Data+Store+Data+with+the+Data+Import+Handlerhtml

https://wiki.apache.org/solr/DataImportHandler正則表達式

http://wiki.apache.org/solr/TikaEntityProcessorsql

Solr 經過Dataimport能夠對各類文件類型(包括郵件)建索引,也能夠對關係型數據庫建索引。數據庫

前提依賴Jar包apache

Dataimport從關係型數據庫建索引時,依賴如下jar包,這些Jar包位於Solr安裝包下面的solr-6.1.0\dist\目錄下目錄下:json

本實例是SQL Server關係型數據庫,因此還要添加sqljdbc42.jar到指定路徑下。sqlserver

Dataimport爲普通文件建索引時,依賴如下jar包,這些jar包位於Solr安裝包的solr-6.1.0\contrib\extraction\lib目錄下ui

 

 

這些jar包在本機上的統一存放位置爲:/var/lib/solr/lib/url

在solrconfig.xml文件中添加以上jar包的引用。

<lib dir="/var/lib/solr/lib/" regex=".*\.jar" />

1、配置solrconfig.xml

  <requestHandler name="/dataimport" class="solr.DataImportHandler">
    <lst name="defaults">
      <str name="config">tika-data-config.xml</str>
      <str name="update.chain">uuid</str>    
    </lst>
  </requestHandler>

2、配置tika-data-config.xml

在文件solrconfig.xml同級目錄下,新建文件tika-data-config.xml,tika-data-config.xml文件中的內容配置以下:

<dataConfig>  
<!--能夠配置多個dataSource,每一個都有惟一一個name--> <dataSource name="sqldb2" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://10.2.8.170:1433" user="xxx" password="xxxxxxx"/> <dataSource type="BinFileDataSource" name="f1"/> <dataSource type="FileReaderDataSource" name="f2"/> <document>
<!--能夠配置多個Entity,每一個Entity經過name屬性來區分-->
<!--Entity數據源爲文件--> <entity name="files" dataSource="f1" rootEntity="false" processor="FileListEntityProcessor" baseDir="/usr/local/solr/files/" fileName=".*.(doc)|(pdf)|(xls)|(ppt)|(docx)|(txt)|(pptx)|(xlsx)|(xml)|(csv)|(json)|(html)|(sh)|(css)|(png)" recursive="true"> <field column="fileAbsolutePath" name="url" /> <field column="fileSize" name="size" /> <field column="fileLastModified" name="lastModified" /> <field column="file" name="fname"/> <entity name="documentImport" processor="TikaEntityProcessor" url="${files.fileAbsolutePath}" format="text"> <field column="Author" name="author" meta="true"/> <field column="title" name="title" meta="true"/> <field column="subject" name="subject" meta="true"/> <field column="Content-Type" name="content_type" meta="true"/> <field column="text" name="content"/> </entity> </entity>
<!--Entity數據源爲SQL Server數據庫--> <entity name="DimOrganization" dataSource="sqldb2" query="SELECT [物料類型名稱] as 名稱 FROM [GreeBGDW].[dbo].[Dim_MaterielType]"> <field column="名稱" name="name"/> </entity>
         <!--Entity數據源爲SQL Server數據庫-->
           <entity name="180119" dataSource="sqldb2" 
query="SELECT [name] as name , [name] as cat ,name as manu FROM [GreeBGDW].[dbo].[180119]"> <field column="name" name="name"/> <field column="cat" name="cat"/> <field column="manu" name="manu"/> </entity> </document> </dataConfig>


 
文件實體屬於簡介 

一個簡單的實體處理程序,能夠用於枚舉標準文件系統中的文件列表,它不須要使用DataSource.屬性以下:

  • fileName:(必填) 用正則表達式來標記文件名
  • baseDir:(必填) 基礎目錄,絕對路徑.
  • recursive:是否遞歸文件列表,默認爲false.
  • excludes:不包括的文件名的正則表達式
  • newerThan:日期參數,格式: (yyyy-MM-dd HH:mm:ss),它也能夠是一個數學日期,如('NOW-3DAYS'),其中的單引號是必填的.也能夠是一個有效的變量格式,如(${var.name}).
  • olderThan :日期格式,規則同上.
  • biggerThan:整型參數.
  • smallerThan:整型參數.
  • rootEntity:它通常狀況下都是false(除非你只索引文件名).直屬於<document>下的實體纔是根實體.那就意味着,根實體發出的每一行都會被solr/lucene建立.可是在這種狀況下,咱們不但願一個文件對應一個文檔(document).咱們但願生成一個文檔(document),每一行的發出都是由下面的實體'x'來完成的.由於實體'f'包含了rootEntity=false,直屬實體f下的實體就變成了一個根實體.
  • dataSource:數據源
 
錯誤記錄

【錯誤一】 org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /configs/collection2/dataimport.properties

【解決方法】在配置文件conf/目錄下添加一個空的dataimport.propertie文件。

相關文章
相關標籤/搜索