本文档简要介绍如何运行solr,如何进行数据操作。
本教程使用solr 4.9,需要。。。
1. Java 1.7或者更高。 2. 下载solr,地址。
解压solr压缩包,并且进入到"example"文件夹中。
Solr可以在很多Java容器中运行,本教程使用jetty。
运行example文件夹中的start.jar,java -jar start.jar
,就可以使用jetty运行solr的war包,配置文件使用的是example中的configs。
上面的命令会启动jetty服务器,端口默认是8983,并且会将日志打印到控制台。
可以通过http://localhost:8983/solr/来打开solr的管理员页面。
Solr服务器已经起开了,但是没有任何数据。我们可以通过post命令来向其中add(update、delete、pending adds and deletes)文档来修改solr的索引。实现的方式详情。
exampledocs目录中包含了一些样例文件,这些文档可以通过命令post到solr中。在此我们使用java -jar post.jar -h这种方式。
java -jar post.jar solr.xml monitor.xml
现在Solr中索引了两篇文档,并且事物已经提交。我们可以打开http://localhost:8983/solr/#/collection1/query这个链接,来进行实验,在"q"这个输入框中输入“solr”,点击“Excute Query”,浏览器会跳到http://localhost:8983/solr/collection1/select?q=solr&wt=xml页面。
我们可以将所有的xml文档都添加到Solr中,java -jar post.jar *.xml
。
现在我们可以使用Solr Query Syntax来查询数据。
video
name:video
+video +price:[* TO 400]
还有很多种方式将数据导入到Solr中:
+ 通过Data Import Handler(DIH)从数据库中导入数据 + 加载CSV文件(文件中的数据用逗号分隔),csv文件可以是Excel和Mysql导出的。 + Post json文档+ 通过Solr Cell索引二进制文档,如word或者pdf。 + 通过java或者solr支持的其他语言,用程序创建并导入到solr中。
我们注意到即使solr.xml这个文档被导入了两次,但是我们在搜索solr关键字时,仍旧得到一个结果。这是因为每个文档都有一个唯一性的字段"id"。向solr中添加文档时,如果id相同,solr就会更新这篇文档。我们可以通过http://localhost:8983/solr/#/collection1/plugins/core?entry=searcher这个页面中的numDocs和maxDoc来验证。
numDocs代表索引中的document的数目(这个数目可能比solr中xml文件的数目大,因为单个xml文件可能包含多个document)。numDocs可能比maxDocs还要大,因为某些文档可能被删除了,但是索引还没有更新。即使我们多次post同一份xml文件,numDocs也不会增加,因为id相同,solr做的是update动作。
编辑这些xml文件,修改其中的内容,然后重新运行java -jar post.jar
命令,再进行搜索,我们就可以看到刚才修改的内容。
我们可以向solr post删除命令,如果指定了id就是删除某篇document;如果这个命令中的query可以匹配多个document,那就删除多个document(小心)。下面的命令会删除指定的document。
java -Ddata=args -Dcommit=false -jar post.jar "<delete><id>SP2514N</id></delete>"
上面的命令,我们指定了commit=false,所以我们还可能会检索到刚刚删除的document,因为索引还没有更新。
通过statistics page这个updateHandler页面,我们可以看到删除document生效的过程,deletesById这个值降为0,cumulative_deletesById和autocommit这两个增加。
下面是使用query批量删除document的示例。
java -Dcommit=false -Ddata=args -jar post.jar "<delete><query>name:DDR</query></delete>"
如果我们想让之前的变化立即生效,我们可以通过命令强制solr使用新的searcher:
Java -jar post.jar -
现在,再次执行之前的query,可以发现已经删除的document,不会再被搜索出来了。我们可以再次通过statistics page来看updateHandlercommit的个数,和searcher中的numDocs。
使用新的searcher,可能会花费很高的代价(时间、内存等),所以最好是积攒很多changes,然后批量提交给solr,再让solr重建索引。还有一个命令optimize,它和commit命令完成同样的操作,但是它会强制所有的索引分片都merge到同一个分片中,这样很耗费资源,但能提高检索速度,如果你的索引不经常变化,可以试试。
所有的update命令,都可以使用xml和json两个格式。
为了下面的教程,再把exampledocs文件夹中的xml文件,post到solr中。
java -jar post.jar *.xml
继续阅读