sole(3) 配置Mysql数据导入


 MySql数据导入

大多数的应用程序将数据存储在关系数据库、xml文件中。对这样的数据进行搜索是很常见的应用。所谓的DataImportHandler提供一种可配置的方式向solr导入数据,可以一次全部导入,也可以增量导入。

他可以实现

能够读取关系数据库中的数据。
通过可配置的方式,能够将数据库中多列、多表的数据生成solr文档
能够通过solr文档更新solr
提供通过配置文件就能够导入所有数据的能力
能够发现并处理 由insert、update带来的变化(我们假定在表中有一个叫做“last-modified的列”)
能够配置"完全导入"和"增量导入"的时间
让读取xml文件,并建立索引成为可配置。
能够将 其他的数据源(例如:ftp,scp,etc)或者其他格式的文档(Json,csv)以插件的形式集成到项目中。


这个 Handler首先要在solrconfig.xml文件中配置下,如下所示。

  1. <requestHandlername="/dataimport"class="org.apache.solr.handler.dataimport.DataImportHandler">
  2. <lstname="defaults">
  3. <strname="config">/home/username/data-config.xml</str>
  4. </lst>

</requestHandler>

 

从它的名字上,我们或许也可以猜到,
DataImportHandler正是requestHandler的实现。我们一共需要在两个地方配置文件中进行一些配置。
solrconfig.xml 。 data-config.xml必须在这个文件中配置,datasource也可以。不过,一般将datasource放在data- config.xml文件中。

下面几个步骤是必要的.
1.定义一个data-config.xml 文件,并这个它的路径配置到solrconfig.xml中关于DataImportHandler的配置中。给出Connection的信息(假设你选择在solrconfig中配置datasource)

  1. <dataConfig> 
      <dataSource type="JdbcDataSource"  name="documentfirst"
       driver="com.mysql.jdbc.Driver" 
       url="jdbc:mysql://localhost:3306/test" 
       user="root" 
       password="root" 
       />  
  2.  <dataSource type="JdbcDataSource"  name="documentsecond"
       driver="com.mysql.jdbc.Driver" 
       url="jdbc:mysql://localhost:3306/eshopping" 
       user="root" 
       password="root" 
       />
     
    然后这样使用 :
  1.  <document  > 
            <entity name="documents"  dataSource="documentfirst"
              query="select id,title,content,date_added from documents" 
              deltaImportQuery="select  id,title,content,date_added  from documents where ID='${dataimporter.delta.id}'" 
              deltaQuery="select id  from documents where date_added > '${dataimporter.last_index_time}'" 
              deletedPkQuery="select id  from documents where id=0"> 
                <field column="id" name="id" /> 
                <field column="title" name="title" /> 
                <field column="content" name="content" /> 
                <field column="date_added" name="date_added" /> 
            </entity> 
            <entity name="employee"  dataSource="documentsecond"
              query="select id,address,birthday,cardno from idcard" 
              deltaImportQuery="select id,address,birthday,cardno  from idcard where ID='${dataimporter.delta.id}'" 
              deltaQuery="select id  from idcard where date_added > '${dataimporter.last_index_time}'" 
              deletedPkQuery="select id  from idcard where id=0"> 
                <field column="id" name="id" /> 
                <field column="address" name="address" /> 
                <field column="birthday" name="birthday" /> 
                <field column="cardno" name="cardno" /> 
            </entity> 
      </document>  
  2. 配置完数据源(多数据源配置中,"name"属性作为唯一标识,必须保证唯一性)后,需要在schema.xml总配置是分词与保存,参考代码如下:
  3. <field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <field name="title" type="text" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/> 
    <field name="content" type="text" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/> 
    <field name="date_added" type="date" indexed="false" stored="true"/> 
    <field name="text" type="text_general" stored="false" indexed="true"  multiValued="true"/>

    <defaultSearchField>text</defaultSearchField>
      <copyField source="title" dest="text"/> 
      <copyField source="content" dest="text"/>
     
    <field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <field name="address" type="string" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/> 
    <field name="birthday" type="date" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/> 
    <field name="cardno" type="string" indexed="true" stored="true"/> 


    <defaultSearchField>text</defaultSearchField>
      <copyField source="address" dest="string"/> 
      <copyField source="birthday" dest="string"/> 
        <copyField source="cardno" dest="string"/>

一切准备就绪,打开DataImportHandler页面去验证,是否该配置的都配置好了。http://localhost:8080/solr/dataimport

2.1.使用“完全导入”命令将数据从数据库中导出,并提交给solr建立索引

http://localhost:8080/solr/dataimport?command=full-import
2.2.使用“增量导入”命令对数据库发生的变化的数据导出,并提交给solr建立索引。

http://localhost:8080/solr/dataimport?command=delta-import

PS详细配置参数

配置JdbcDataSource

JdbcDataSource中的属性有
  • driver(必需的):jdbc驱动名称
  • url(必需的):jdbc链接
  • user:用户名
  • password:密码
  • 批量大小:jdbc链接中的批量大小

任何其他的在JdbcDataSource中配置的属性,都会被直接传给jdbc driver

配置data-config.xml

solr document是schema,它的域上的值可能来自于多个表.

data-config.xml的根元素是document。一个document元素代表了一种文档。一个 document元素中包含了一个或者多个root实体。一个root实体包含着一些子实体,这些子实体能够包含其他的实体。实体就是,关系数据库上的表或者视图。每个实体都能够包含多个域,每个域对应着数据库返回结果中的一列。域的名字跟列的名字默认是一样的。如果一个列的名字跟solr field的名字不一样,那么属性name就应该要给出。其他的需要的属性在solrschema.xml文件中配置。

为了能够从数据库中取得想要的数据,我们的设计支持标准sql规范。这使得用户能够使用他任何想要的sql语句。root实体是一个中心表,使用它的列可以把表连接在一起。

 

dataconfig的结构

dataconfig的结构不是一成不变的,entity和field元素中的属性是随意的,这主要取决于processor和transformer。

以下是entity的默认属性

  • name(必需的):name是唯一的,用以标识entity
  • processor:只有当datasource不是RDBMS时才是必需的。默认值是SqlEntityProcessor
  • transformer:转换器将会被应用到这个entity上,详情请浏览transformer部分。
  • pk:entity的主键,它是可选的,但使用“增量导入”的时候是必需。它跟schema.xml中定义的uniqueKey没有必然的联系,但它们可以相同。
  • rootEntity:默认情况下,document元素下就是根实体了,如果没有根实体的话,直接在实体下面的实体将会被看做跟实体。对于根实体对应的数据库中返回的数据的每一行,solr都将生成一个document。

一下是SqlEntityProcessor的属性

  • query (required) :sql语句

  • deltaQuery : 只在“增量导入”中使用

  • parentDeltaQuery : 只在“增量导入”中使用

  • deletedPkQuery : 只在“增量导入”中使用

  • deltaImportQuery : (只在“增量导入”中使用) . 如果这个存在,那么它将会在“增量导入”中导入phase时代替query产生作用。这里有一个命名空间的用法${dataimporter.delta.}详情请看solr1.4.

Commands

 

The handler 通过httprequest 向外界提供它的API . 以下是一些或许你会用到的操作

  • full-import : "完全导入"这个操作可以通过访问URL http://:/solr/dataimport?command=full-import 完成。

    • 这个操作,将会新起一个线程。response中的attribute属性将会显示busy。

    • 这个操作执行的时间取决于数据集的大小。

    • 当这个操作运行完了以后,它将在conf/dataimport.properties这个文件中记录下这个操作的开始时间

    • 当“增量导入”被执行时,stored timestamp这个时间戳将会被用到

    • solr的查询在“完全导入”时,不是阻塞的

    • 它还有下面一些参数:

      • clean : (default 'true'). 决定在建立索引之前,删除以前的索引。

      • commit: (default 'true'). 决定这个操作之后是否要commit

      • optimize: (default 'true'). 决定这个操作之后是否要优化。

      • debug : (default false). 工作在debug模式下。详情请看 the interactive development mode (see here)

  • delta-import : 当遇到一些增量的输入,或者发生一些变化时使用`DataImport - 航梦 - 火星?地球? http://:/solr/dataimport?command=delta-import . 它同样支持 clean, commit, optimize and debug 这几个参数.

  • status : 想要知道命令执行的状态 , 访问 URL http://:/solr/dataimport .它给出了关于文档创建、删除,查询、结果获取等等的详细状况。

  • reload-config : 如果data-config.xml已经改变,你不希望重启solr,而要重新加载配置时,运行一下的命令http://:/solr/dataimport?command=reload-config

  • abort : 你可以通过访问 url http://:/solr/dataimport?command=abort 来终止一个在运行的操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章