创建Core,并对索引进行CRUD操作

修改各种配置文件。

1、修改solrhome下的solr.xml文件

注解掉zookeeper搭建集群配置,我们后面会采用master-slave的形式。

至于zookeeper的形式可以阅读以下这篇文章【solrCloud集群配置指导】:http://www.aboutyun.com/thread-9432-1-1.html

[html]  view plain  copy
  1.   
  2.     
2、在sorlhome文件夹下创建【my_solr】文件夹。

3、在【my_solr】文件夹中添加core.properties配置,内容如下:

[html]  view plain  copy
  1. name=my_solr  
这个name的值实际上就core的名称,可以任意命名,为了保证统一和方便阅读,个人觉得最好和文件夹名称一致。

4、将【solr-6.0.0\example\example-DIH\solr\solr】下的conf文件夹拷贝到【my_solr】文件夹下。包含如下文件:

conf】中文件目录如下:

创建Core,并对索引进行CRUD操作_第1张图片

5、solr-5.0 以上默认对schema的管理是使用managed-schema,不能手动修改,需要使用Schema Restful的API操作。

如果要想手动修改配置,把【conf】文件夹中managed-schema拷贝一份修改为schema.xml,在solrconfig.xml中修改如下:

[html]  view plain  copy
  1. <codecFactory class="solr.SchemaCodecFactory"/>  
  2.     
  3.   <schemaFactory class="ClassicIndexSchemaFactory"/>  
  4.     
重启tomcat8,可能会报错,查看tomcat日志发现,比喻:

缺少DataImportHandler的jar等,那么将【solr-6.0.0\dist】下的solr-dataimporthandler-6.0.0.jar和solr-dataimporthandler-extras-6.0.0.jar

拷贝到【apache-tomcat-8.0.33\webapps\solr\WEB-INF\lib】下。

重启tomcat8。如果缺少其他jar包,根据报错信息添加即可。没有异常,

访问:【http://localhost:8080/solr/index.html#/】

会出现如下界面:

创建Core,并对索引进行CRUD操作_第2张图片

选择my_solr,会出现如下界面:

创建Core,并对索引进行CRUD操作_第3张图片

至此其实由于没有索引数据,其实solr是个空壳,那么下面写一个应用程序插入solr索引数据。

参考:http://www.open-open.com/lib/view/open1452062296995.html

1、首先需要修改schema.xml文件,添加

[html]  view plain  copy
  1. <field name="content_test" type="text_general" indexed="true" stored="true" multiValued="true"/>  
field的属性和配置,可以google一下 schema.xml 说明很多,用法也很多,这里就不赘述。

2、新建测试类

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MySolr {

    //solr 服务器地址
    public static final String solrServerUrl = "http://localhost:8080/solr";
    //solrhome下的core
    public static final String solrCoreHome = "mySolr";
    //待索引、查询字段
    public static String[] docs = {"Solr是一个独立的企业级搜索应用服务器",
            "它对外提供类似于Web-service的API接口",
            "用户可以通过http请求",
            "向搜索引擎服务器提交一定格式的XML文件生成索引",
            "也可以通过Http Get操作提出查找请求",
            "并得到XML格式的返回结果"};

    public static SolrClient getSolrClient(){
        return new HttpSolrClient(solrServerUrl+"/"+ solrCoreHome);
    }

    /**
     * 创建索引
     */
    public static void createIndex() {
        SolrClient client = getSolrClient();
        int i=0;
        List solrDocs = new ArrayList();
        for (String content : docs) {
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id", i++);
            doc.addField("content_test", content);
            solrDocs.add(doc);
        }
        try {
            client.add(solrDocs);
            client.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 搜索
     */
    public static void search(){
        SolrClient client = getSolrClient();
        SolrQuery query = new SolrQuery();
        query.setQuery("content_test:搜索");
        query.setSort("id", SolrQuery.ORDER.asc);
        QueryResponse response = null;
        try {
            response = client.query(query);
            System.out.println(response.toString());
            System.out.println();
            SolrDocumentList docs = response.getResults();
            System.out.println("文档个数:" + docs.getNumFound());
            System.out.println("查询时间:" + response.getQTime());
            for (SolrDocument doc : docs) {
                System.out.println("id: " + doc.getFieldValue("id") + "      content: " + doc.getFieldValue("content_test"));
            }
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 更新索引(通过新增一条ID字段已存在,其他字段变化的索引实现更新)
     */
    public static void updateIndex() {
        SolrClient client = getSolrClient();
        int id=3;
        String content="向搜索引擎服务器提交一定格式的XML文件生成索引(此索引更新了)";
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", id);
        doc.addField("content_test", content);
        try {
            client.add(doc);
            client.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 删除索引
     */
    public static void deleteIndex() {
        SolrClient client = getSolrClient();
        try {
            client.deleteById("7");
            client.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        //createIndex();
        search();
        //updateIndex();
        //deleteIndex();
    }

}

3、运行成功后,会在【solrhome/my_solr】文件夹下创建一个【data】的文件夹,这个文件夹中的内容就是我们的solr索引。

其实其对于的是solconfig.xml中如下配置:

[html]  view plain  copy

你可能感兴趣的:(Solr,slor)