Solr-6:SolrRestAPI

Posted 健哥说编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr-6:SolrRestAPI相关的知识,希望对你有一定的参考价值。

1、Solr Core

主要内容:

创建Core

卸载Core

重新加载Core

重命名Core

Core热交换

Core优先

导入数据到core

Core之间的索引数据合并

 

3.1Solr Core简介

Solr中的Core术语是指一个单一的索引数据,而索引又是多个document组成的,所有Core是多个Document的集合。

Solr设计多个Core来存放索引,就是为了实现将两个不相干的对象进行分离独立管理,这样,每一个对象的索引都有一套自己的管理文件:schema.xmlsolrconfig.xml彼此之间互不影响。

但分为多个Core也会带来一些问题,如跨Core联合查询的问题,虽然Solr支持Join来联合查询,但性能上会有所损失。

Solr将搜索关键字,保存在一个倒排表中,搜索的性能提高了N个数量级。

Solr中的更新较慢,所以更新时,只能删除再新增。

Solr的魅力在于它灵活的schema机制。Solr中的schema.xml约束比较宽松。

Solr Core在生产环境下,解决以下关键问题:

Ø 重建索引

Ø 配置变量影响最小化

Ø 索引合并和分裂

Ø Core热交换

 

 

3.2Solr 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.2schema.xml文件

定义域和域类型。

域类型决定了:如何索引、如何分词、如何存储。

 

3.2.3solrconfig.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.4Index的拆分

在合并就是拆分

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的主要内容,如果未能解决你的问题,请参考以下文章