Solr-6:SolrRestAPI
Posted 健哥说编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr-6:SolrRestAPI相关的知识,希望对你有一定的参考价值。
1、Solr Core
主要内容:
创建Core
卸载Core
重新加载Core
重命名Core
Core热交换
Core优先
导入数据到core中
Core之间的索引数据合并
3.1、Solr Core简介
Solr中的Core术语是指一个单一的索引数据,而索引又是多个document组成的,所有Core是多个Document的集合。
Solr设计多个Core来存放索引,就是为了实现将两个不相干的对象进行分离独立管理,这样,每一个对象的索引都有一套自己的管理文件:schema.xml、solrconfig.xml,彼此之间互不影响。
但分为多个Core也会带来一些问题,如跨Core联合查询的问题,虽然Solr支持Join来联合查询,但性能上会有所损失。
Solr将搜索关键字,保存在一个倒排表中,搜索的性能提高了N个数量级。
Solr中的更新较慢,所以更新时,只能删除再新增。
Solr的魅力在于它灵活的schema机制。Solr中的schema.xml约束比较宽松。
Solr Core在生产环境下,解决以下关键问题:
Ø 重建索引
Ø 配置变量影响最小化
Ø 索引合并和分裂
Ø Core热交换
3.2、Solr Core的基本管理
3.2.1、两个基本组成元素
Solr Core两个必要的组成元素:
schema.xml
solrconfig.xml
这两个配置文件,必须要放到SOLR_HOME\core_name\conf目录下。
solr_home可以在web.xml中进行配置:(前面已经讲过)
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:/solr_home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
3.2.2、schema.xml文件
定义域和域类型。
域类型决定了:如何索引、如何分词、如何存储。
3.2.3、solrconfig.xml文件
配置索引创建、查询、Solr缓存及solr组件处理器等。
3.2.4、创建core时对应的目录
附录:
1、RestAPI
1.1、查询某个core的状态:
http://localhost:8080/solr/admin/cores?action=STATUS&core=core1
1.2、查询所有core的状态
就是将上面的core=core1去掉即可:
http://localhost:8080/solr/admin/cores?action=STATUS
1.3、合并索引
http://localhost:8080/solr/admin/cores?action=mergeindexes&core=core1&indexDir=/opt/core1/data/index&indexDir=/opt/core2/data/index
说明:
1、core1不必与后面的索引目录有关系
2、Core1必须已经存在。
3、可以合并所有目录,甚至是lucene创建的索引目录,只要可以兼容就可以。
4、可以传递更多的indexDir索引目录。
因为core索引目录是固定的,所以,也可以指定core的名称进行合并索引:
http://localhost:8080/solr/admin/cores?action=mergeindexes&core=core1&srcCore=core2&scrCore=core3
还可以使用Solr提供一个索引工具,进行索引合并:lucene-misc-version.jar
如此文件在:solr-5.5.5\server\solr-webapp\webapp\WEB-INF\lib目录下:
命令如下:
java -cp lucene-misc-5.5.5.jar:lucene-misc-5.5.5.jar
org.apache.lucene.misc.IndexMergeTool C:/newIndex C:/core1/data/index C:/core2/data/index
可以查看IndexMergeTool的源代码查看合并的代码:
以下是完整代码:
FSDirectory mergedIndex = FSDirectory.open(Paths.get(args[0], new String[0]));
IndexWriter writer = new IndexWriter(mergedIndex, new IndexWriterConfig(null).setOpenMode(IndexWriterConfig.OpenMode.CREATE));
Directory[] indexes = new Directory[args.length - 1];
for (int i = 1; i < args.length; i++) {
indexes[(i - 1)] = FSDirectory.open(Paths.get(args[i], new String[0]));
}
System.out.println("Merging...");
writer.addIndexes(indexes);
System.out.println("Full merge...");
writer.forceMerge(1);
writer.close();
System.out.println("Done.");
1.4、Index的拆分
在合并就是拆分
1:
http://localhost:8080/solr/admin/cores?action=SPLIT&core=core1&path=/path/to/index/1&path=/path/to/index/2
2:
http://localhost:8080/solr/admin/cores?action=SPLIT&core=core1&targetCore=core2&targetCore=core3
以上是关于Solr-6:SolrRestAPI的主要内容,如果未能解决你的问题,请参考以下文章