`

Solr索引创建与更新-XML

 
阅读更多

 

Solr索引创建与更新-XML

 

 

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

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

 

 

下面我们了解下solr更新索引的方式,先看下xmlxml格式算是最简单,最容易理解的格式,如果想理解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>

 

 

两外还有commitoptimize这两个字段

 

<commit/>
<optimize/>

 

 

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

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

 

 

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

关于curl命令,有不理解的地方请看这里:http://isilic.iteye.com/blog/1764049,下面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语法,按照idquery删除文档:

 

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

 

 

<rollback/>
<prepareCommit/>

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

 

 

更新数据索引:

 

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格式使用的广泛性。

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    solr-8、solr-8.11、solr-8.11.2.tgz、solr-8.11.2.zip

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML、JSON等...

    使用xml更新solr索引

    Solr接受xml格式数据更新、提交、修改索引。

    配置好的solr启动环境

    完全配置好的solr容器,直接修改web.xml设置一下solr core路劲即可

    Solr3.6 + 中文分词 完整Tomcat工程部署包

    在tomcat的conf文件夹建立Catalina文件夹,然后在Catalina文件夹中在建立localhost文件夹,在该文件夹下面建立 apache-solr-3.6.0.xml 提交搜索资源并建立索引 cd /Volumes/Date/apache-tomcat-7.0.27/webapps/...

    solr基础知识介绍

    4.1 创建索引 7 4.1 删除索引 7 4.1 索引查询 8 5.配置文件分析 9 5.1 schema.xml 9 5.1.1 文件分析 9 5.1.2 文档注释 13 5.2 solrconfig.xml 16 6.Solr缓存 18 6.1 filterCache 18 6.2 queryResultCache 18 6.3 ...

    solr-8.2.0.zip

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...

    已编译版本solr-8.11.2.tgz

    Solr 8.11.2是8.x系列的最后一个版本,新版本已经是9.0版本了。 1,什么是solr? Solr是一个独立的企业级搜索应用服务器,他对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务提供一定格式...

    apache solr1.3.0开发包源码及文档

    Apache Solr 1.3.0发布,Apache Solr是一个性能强大的,基于 Lucene 的全文搜索的 开源企业级搜索服务器,拥有XML/HTTP,JSON APIs,hit highlighting, faceted search, caching, replication,web管理界面等很多功能...

    基于java-solr-geo空间坐标搜索、距离排序、分页

    基于solr-geo空间搜索 1、Solr的schema.xml配置 定义坐标field 2、Solr的data-config.xml配置 建立索引 3、java查询语法 坐标距离、分页、排序

    Solr高级搜索+tomcat整合服务器

    索引:客户端(可以是浏览器可以是java程序)发送post请求到solr服务器,发给solr服务器一个文档(xml、json),就可以进行一个添加索引删除索引、修改索引的操作。 搜索:客户端(可以是浏览器可以是java程序)发送...

    solr-7.7.1

    Solr是一个独立的企业级搜索应用服务器,基于Lucene。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。它可对外提供类似于Web-service的API接口。用户可以...

    lucene-5.3.0+solr-5.3.0 jar包和文档示例

    人们经常提到资讯检索程式库,虽然与搜索引擎有关,但不应该将资讯检索程式库与搜索引擎相混淆。 olr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。用户可以通过http请求,向搜索引擎服务器提交一定...

    solr配置和solrj使用(demo)

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。...Solrj 是访问 Solr 的 Java 客户端,它提供添加、更新和查询Solr 索引的接口。http://wiki.chenlb.com/solr/doku.php?id=solrj

    SOLR的应用教程

    2 Solr的安装与配置 13 2.1 在Tomcat下Solr安装 13 2.1.1 安装准备 13 2.1.2 安装过程 14 2.1.3 验证安装 15 2.2 中文分词配置 15 2.2.1 mmseg4j 15 2.2.2 paoding 19 2.3 多核(MultiCore)配置 22 2.3.1 MultiCore...

    solr-5.5.1.zip

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...

    solr定时索引jar

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...

    whyte-dwarf:自定义搜寻器和自动Solr索引更新器

    为何矮人自定义搜寻器和自动Solr索引更新器危险代码:目前未经过消毒的输入要求: crawler_lists必须可写crawler_json必须可写编辑config / config.php以获取Solr设置和抓取延迟使用表单来设置您的爬网参数。...

    solr 企业搜索引擎教程

    更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。 通过对 Solr 进行适当的配置, 某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此 外,很多 Lucene 工具(如 Nutch、...

    metaproxy-SUB:SUBGöttingen的超代理配置

    dspace /:用于从DSpace的Solr索引提供数据的配置文件 dspace-route.xml:Metaproxy路由配置 dspace.pqf:将SRU索引名称映射到Solr索引名称 dspace-pql-to-solr.xsl:将Z39.50索引号映射到Solr索引名称 dspace-to-...

    solr-4.10.3版本

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的...

Global site tag (gtag.js) - Google Analytics