Solr之如何进行索引操作。

来源:互联网 发布:网络隐私权主要内容 编辑:程序博客网 时间:2024/06/06 00:18

基本索引操作

        在Solr中,通过向部署在servlet容器中的Solr Web应用程序发送HTTP请求来启动索引。您可以向Solr索引servlet传递四个不同的索引请求:

  1. add/update允许您向Solr添加文档或更新文档。直到提交后才能搜索到这些添加和更新。
  2. commit告诉solr,应该使上次提交以来所做的所有更改都可以搜索到。
  3. optimize重构Lucene的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常的运行。优化是一个耗时较多的过程。
  4. delete可以通过id或查询来指定。按id删除将删除具有指定id的文档;按查询删除将删除查询返回idea所有文档。

新增、更新索引

        <add>

             <doc>

                  <field name = "url">http://localhost/myBlog/solr-rocks.html</field>

                  <field name = "title">Solr Search is Simply Great</field>

                  <field name = "keywords">solr,lucene,enterprise,search</field>

                  <field name = "creationDate">2017-01-06T05:04:00.000Z</field>

                  <field name = "rating">10</field>

                  <field name = "content">Solr is a really great open source search server. It scales, it's easy to configure and the Solr community is really supportive.</field>

                  <field name = "published">on</field>

             </doc>

        </add>

        <doc>中的每个field条目告诉Solr应该将哪些Field添加到所创建文档的Lucene索引中。可以向add命令添加多个<doc>。通过HTTP POST 将命令发往:http://localhost:8080/solr/update。如果一切进展顺利,则会随<result status = "0" />返回一个XML文档,添加文档成功,如果是相同的URL自动更新文档(示例应用程序中的URL是Solr识别文档以前被添加过所使用的唯一id)。

        注:schema.xml里有一个uniqueKey的配置,这里将url字段作为索引文档的唯一标识符,非常重要。

        <uniqueKey>url</uniqueKey>

删除索引

删除指定ID的索引

        <delete><id>05138022</id></delete>

删除查询到的索引数据

        <delete><query>id:IW-02</query></delete>

删除所有索引数据

        <delete><query>*:*</query></delete>

        通过HTTP POST 将命令发往:http://localhost:8080/solr/update

        注:以上xml文件通过HTTP POST 将命令发往在http://192.168.10.85.18080/solr/update/,多核心时为这个地址http://192.168.85.18080/solr/core0/update/

批量索引操作

        对原有系统已有的数据或需要索引的数据量较大的情况,需要进行批量的索引操作。

通过CVS文件的方式提交

        直接采用通过http方式调用solr的接口方式,效率较差,采用solr本身对CSV的支持(http://wiki.apache.org/solr/UpdateCSV),将数据导出为csv格式,然后调用solr的csv接口http://localhost:8080/solr/update/csv

       具体操作步骤:

       1、修改conf/solrconfig.xml

               (1)、新增CSV处理配置项

               <!-- CSV update handler,loaded on demand -->

               <requestHandler name = "/update/csv" class = "solr.CSVRequestHandler" startup = "lazy">

               </requestHandler>

                (2)、修改iaenableRemoteStreaming = true

               <requestParsers enableRemoteStreaming = "true" multipartUploadLimitInKB = "2048" />

        2、下面的命令能直接读取输入文件提交到Solr

        curl http://localhost:8983/solr/update/csv?stream.file=exampledocs/books.csv&stream.contentType=text/plain;charset=utf-8

数据库数据导入生成索引(DataImportHandler DIH)

       写程序可以将数据读出100条,如果你的内存够大,可以是1000条甚至更多,然后放入Collection中,批量提交至solr。或者读取数据写入xml文件中,再将该文件提交到solr等等。但是,我们还可以通过配置文件直接读取数据库建立索引。

       1、全量更新索引

                (1)、提供对应数据库的jdbc驱动。

                 将jdbc驱动放在TOMCAT_HOME\webapps\solr\WEB-INF\lib目录下。

                (2)、在C:\solr-tomcat\solr\conf目录下新建db文件夹,在db文件夹中新建db-data-config.xml内容如下:

                 <dataConfig>

                    <dataSource type = "JdbcDataSource" driver = "oracle.jdbc.driver.OracleDriver" url = "jdbc:oracle:thin:@192.168.1.1:152:数据库名" user = "用户名" password = "密码" />

                    <document name = "messages">

                        <entity name = "message" transformer = "ClobTransformer" query = "select * from tb_message">

                              <field column = "ID" name = "id" />

                              <field column = "TITLE" name = "title" />

                              <field column = "CONTENT" clob = "true" name = "content" />

                              <field column = "SENDTIME" name = "sendtime" />

                        </entity>

                    </document>

                 </dataConfig>

                (3)、修改C:\solr-tomcat\solr\conf目录的solrconfig.xml。在响应的位置添加如下代码:

                 <!-- DataImportHandler -->

                 <requestHandler name = "/dataimport" class = "org.apache.solr.handler.dataimport.DataImportHandler">

                     <lst name = "defaults">

                          <str name = "config">C:\solr-tomcat\solr\conf\db\db-data-config.xml</str>

                     </lst>

                 </requestHandler>

                 注:C:\solr-tomcat\solr\conf\db\db-data-config.xml是db-data-config.xml的存放路径,你要根据实际情况而定。

                 document:一个文档也就是lucene的document这个没什么解释的。

                 entity:主要针对的是一个数据库表。

                 field:属性column是数据库的字段,name是field的名字,即schema中的field name。

                (4)、启动TOMCAT,输入地址进行导入,导入分为多种模式:我用的是完全导入模式。

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

                 结果:

                 00C:\solr-tomcat\solr\conf\db]db-data-config.xmlfull-importidle1202009-09-0521:28:08Indexing completed.Added/Updated:2 documents,Deleted            0Document.2009-09-05 21:28:092009-09-05 21:28:090:0:0.579This response formatis experimental.It is likely to change in the future.

                 (5)、再去查询你刚才提交的数据。

                  上面的例子只不过是很简单的一个部分。针对solr的MultiCore,通过配置db-data-config.xml也可以实现,还有多表,或者多表关联等等操作只要在db-data-config.xml配置清除都可以进行数据的导入。

        2、增量更新索引 

                  (1)、首先要确认表中有last_modified字段。

                  (2)、修改C:\solr-tomcat\solr\conf\db\db-data-config.xml文件,内容如下:

                   <dataConfig>

                         <dataSource type = "JdbcDataSource" driver = "oracle.jdbc.driver.OracleDriver" url = "jdbc:oracle:thin:@192.168.1.1:1521:数据库名" user = "用户名" password = "密码" />

                         <document name = "messages">

                             <entity name = "message" pk = "ID" query = "select * from tb_message" deltaQuery = "select id from tb_message where to_char(last_modified,'YYYY-MM-DD HH24:MI:SS' > '${dataimporter.last_index_time}')">

                                  <field column = "ID" name = "id" />

                                  <field column = "TITLE" name = "title" />

                                  <field column = "CONTENT" clob = "true" name = "content" />

                                  <field column = "SENDTIME" name = "sendtime" />

                              </entity>

                         </document>

                   </dataConfig>

                      (3)、重启tomcat。添加一条记录。

                      访问:http://localhost:8089/solr/dataimport?command=delta-import

                      再查询一下,是不是可以查询到刚才添加的记录了。

原创粉丝点击