Solr索引创建与更新-XML

Solr索引创建与更新-XML

 

 

在上一节中,我们成功启动了solr,并且将数据成功更新到solr中,本次我们来学习一下solr的更新方式。

solr提供了三种更新方式,xml、json、csv,这新更新方式在solr4.0里面都统一用solr.UpdateRequestHandler进行了支持,不过在提交的Content-type中需要设置相应的格式。

 

 

下面我们了解下solr更新索引的方式,先看下xml,xml格式算是最简单,最容易理解的格式,如果想理解solr能够处理的格式,可以参考下solr目录下example/exampledocs目录,里面后缀xml结尾的文档,都是solr支持的xml格式索引。

 

 

在上一篇文章中,我们执行过这个命令:

 

java -jar post.jar *.xml

 

 

这个命令实际上是利用了post.jar的提交功能,当然我们也可以自己提交文档,并且提交自己文档内容,如果想用xml格式提交的话。

 

我们直接以官网为例说明,同时会有solr安装包里面的例子补充,后面介绍json格式和csv格式也一样,不再赘述。

 

XML格式提供增加索引,和删除索引两种功能;那修改索引怎么办?你可以用增加索引的方法,但是可以设定覆盖,或者修改;查询的话就是另外一个话题了,以后会有分析。

 

 

增加索引的xml格式:

 

<add>
  <doc>
    <field name="employeeId">05991</field>
    <field name="office">Bridgewater</field>
    <field name="skills">Perl</field>
    <field name="skills">Java</field>
  </doc>
  [<doc> ... </doc>[<doc> ... </doc>]]
</add>

 

 

这个是极其简单的xml格式,连校验的schema都没有,所以说格式的准确性和内容的正确性都需要自己校验。

看完这个格式,就能理解solr添加xml索引的方式了,是不是比较简单;下面简单解释一下标签属性:

 

 

add标签的可选属性:

 

overwrite="true"|"false":默认是true,同一个uniqueKey的文档会被覆盖
 commitWithin="milliseconds":在规定时间内,文件会被加入索引。
 

 

doc标签的可选属性:

 

boost=<float>:默认是1.0,boost的含义见lucene

 

 

field标签的可选属性: 

 

boost=<float>:默认是1.0,field标签的boost含义和doc字段的boost含义不同

boost使用的例子如下:

<add>
  <doc boost="2.5">
    <field name="employeeId">05991</field>
    <field name="office" boost="2.0">Bridgewater</field>
  </doc>
</add> 

  

 

update="add"|"set"|"inc"

 update的使用例子如下:add表示新添文档,set表示设置field值,inc是个原子操作,solr4,0支持

 

<add>
  <doc>
    <field name="employeeId">05991</field>
    <field name="office" update="set">Walla Walla</field>
    <field name="skills" update="add">Python</field>
</add>
 

 如果field有多个值的话,同样可以对多个field使用update属性

 

<add>
  <doc>
    <field name="employeeId">05991</field>
    <field name="skills" update="set">Python</field>
    <field name="skills" update="set">Java</field>
    <field name="skills" update="set">Jython</field>
</add>

 

 

两外还有commit和optimize这两个字段

 

<commit/>
<optimize/>

 

 

这两个字段的用法比较高级,其中commit分为hard commit和soft commit,前者确保索引修改对其它的请求可见;后者只保证对当前的这次操作之后的索引可见,如果JVM crash或者断点的话,后者所做的修改时不会被写到索引文件中,当然,后者肯定要更快点,如何使用还要仔细斟酌。optimize字段和hard commit类似,不过这个操作会强制索引文件合并;这个操作一定要慎重,因为合并索引文件费时费力费资源;其实optimize操作一般是不用操心的,由MergePolicy决定,这个参数会强制MergePolicy立即执行合并策略。

commit和optimize字段是个比较高级的语法,在更新时的考虑比较多,在这篇文章里面就说到这里,想要了解更多参考文档。

 

 

下面我们使用CURL命令来传递参数,提交更新。

注意更新时一定要由Content-Type字段,并且值必须为text/xml,告诉程序调用Xml方式更新。

 

 

curl "http://localhost:8983/solr/update?commit=true" -H "Content-Type: text/xml" --data-binary '<add><doc><field name="id">testdoc</field></doc></add>'

 提交的post请求数据就是xml格式

 

 

如果有其它的参数提交需求,也可以提交在curl命令后面:

 

curl "http://localhost:8983/solr/update?commitWithin=10000" -H "Content-Type: text/xml" --data-binary '<add><doc><field name="id">testdoc</field></doc></add>'

 

 

下面看下delete语法,按照id和query删除文档:

 

<delete>
  <id>05991</id><id>06000</id>
  <query>office:Bridgewater</query>
  <query>office:Osaka</query>
</delete>

 

 

<rollback/>
<prepareCommit/>

 这两个是专家级别Expert-Level的API,不多做解释了,一般用不到。

 

 

更新数据索引:

 

curl http://<hostname>:<port>/solr/update -H "Content-Type: text/xml" --data-binary '
<add>
	<doc boost="2.5">
	 <field name="employeeId">05991</field>
	 <field name="office" boost="2.0">Bridgewater</field> 
	</doc> 
</add>'
 

 

当然get请求也可以,不过get请求参数必须是url-encoded

 

http://localhost:8983/solr/update?stream.body=%3Cdelete%3E%3Cquery%3Eoffice:Bridgewater%3C/query%3E%3C/delete%3E
http://localhost:8983/solr/update?stream.body=%3Ccommit/%3E

 

 

如果想同时更新和删除文档,下面这种格式是错误的。

 

curl http://127.0.0.1:8983/solr/update/?commit=true -H "Content-Type: text/xml" --data-binary '<add><doc><field name="id">17</field></doc></add><delete><id>1234</id></delete>';

 

 

有点想当然了,准确的应该是将这些操作用update标签包起来

 

curl http://127.0.0.1:8983/solr/update/?commit=true -H "Content-Type: text/xml" --data-binary '<update><add><doc><field name="id">17</field></doc></add><delete><id>1234</id></delete></update>';
 

最后,XML格式更新索引部分算是结束了,XML格式算是使用最为悠久的格式之一了,所以solr对于XML格式的支持也是不遗余力,这个也很容易证明XML格式使用的广泛性。

下次我们讲解下其它格式的更新索引的方式。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关推荐