参考资料: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文件。