參考資料: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.屬性以下:
【錯誤一】 org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /configs/collection2/dataimport.properties
【解決方法】在配置文件conf/目錄下添加一個空的dataimport.propertie文件。