zoukankan      html  css  js  c++  java
  • solr6.0学习

    solr6.0学习(一)环境搭建
    准备工作:
    目前最新版本6.0。下载solr 6.0:Solr6.0下载
    JDK8 下载jdk1.8:jdk1.8【solr6.0是基于jdk8开发的】
    tomcat8.0 下载:tomcat8
    ##################################
    在说明搭建环境之前,其实solr5.0之后 solr已经内置jetty服务器,可以自行启动。但是为了加入自己的特性,
    以及在solr基础之上的应用,此文章主要针对发布在tomcat8上。
    ##################################
    1、安装jdk8
    2、下载solr6.0后,解压solr6.0的包。
    3、解压tomcat8
    4、将【solr-6.0.0serversolr-webapp】下的webapp文件拷贝到【apache-tomcat-8.0.33webapps】目录下,
    并将webapp重命名为solr(可以重命名为取任意名称)。
    solr文件目录如下:
    5、将【solr-6.0.0serverlibext】下的所有jar包拷贝到【apache-tomcat-8.0.33webappssolrWEB-INFlib】
    6、将【solr-6.0.0server esources】下的log4j.properties配置文件拷贝到【apache-tomcat-8.0.33webappssolrWEB-INFclasses】,如果WEB-INF下没有classes文件那么 就创建一个classes文件夹。
    7、在【apache-tomcat-8.0.33webappssolr】下新建一个文件【solrhome(文件夹名称可以任意命名)】,将【solr-6.0.0serversolr】下的所有文件拷贝到刚刚创建
    的solrhome中。
    8、修改【apache-tomcat-8.0.33webappssolrWEB-INF】下的web.xml,找到如下代码:
    <env-entry>
    <env-entry-name>solr/home</env-entry-name>
    <env-entry-value>/put/your/solr/home/here</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
    默认是注解掉,放开注解,并将<env-entry-value>中的值修改为刚刚步骤7中的solrhome目录,如:E:projectSearchapache-tomcat-8.0.33webappssolrsolrhome
    9、运行tomcat,运行成功后访问:http://localhost:8080/solr/index.html 即可。

    Solr 6.0 学习(二)创建core并插入索引
    修改各种配置文件。

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

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

    至于zookeeper的形式可以阅读以下这篇文章【solrCloud集群配置指导】:http://www.aboutyun.com/thread-9432-1-1.html
    <!-- 结合zookeeper配置solrColound start -->
    <!-- 采用master-slave的方式
    <solrcloud>

    <str name="host">${host:}</str>
    <int name="hostPort">${jetty.port:8983}</int>
    <str name="hostContext">${hostContext:solr}</str>

    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>

    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
    <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>

    </solrcloud>

    <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:600000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
    </shardHandlerFactory>
    -->
    <!-- 结合zookeeper配置solrColound end -->
    2、在sorlhome文件夹下创建【my_solr】文件夹。

    3、在【my_solr】文件夹中添加core.properties配置,内容如下:
    name=my_solr
    这个name的值实际上就core的名称,可以任意命名,为了保证统一和方便阅读,个人觉得最好和文件夹名称一致。
    4、将【solr-6.0.0exampleexample-DIHsolrsolr】下的conf文件夹拷贝到【my_solr】文件夹下。包含如下文件:
    5、solr-5.0 以上默认对schema的管理是使用managed-schema,不能手动修改,需要使用Schema Restful的API操作。

    如果要想手动修改配置,把【conf】文件夹中managed-schema拷贝一份修改为schema.xml,在solrconfig.xml中修改如下
    <codecFactory class="solr.SchemaCodecFactory"/>
    <!-- 解除managed-schema管理模式 start -->
    <schemaFactory class="ClassicIndexSchemaFactory"/>
    <!-- 解除managed-schema管理模式 end -->
    重启tomcat8,可能会报错,查看tomcat日志发现,比喻:

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

    拷贝到【apache-tomcat-8.0.33webappssolrWEB-INFlib】下。

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

    访问:【http://localhost:8080/solr/index.html#/】
    选择my_solr,会出现如下界面:
    至此其实由于没有索引数据,其实solr是个空壳,那么下面写一个应用程序插入solr索引数据。

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

    1、首先需要修改schema.xml文件,添加
    <field name="content_test" type="text_general" indexed="true" stored="true" multiValued="true"/>
    field的属性和配置,可以google一下schema.xml 说明很多,用法也很多,这里就不赘述
    2、添加索引数据,代码如下:

    编写过程中可能会报错,最简便的方法是将web-inf下lib里所有jar包添加进来,然后运行,出什么错,就添加什么jar包4
    ------插入数据---------
    package com.solr.insertData;

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

    import org.apache.solr.client.solrj.SolrClient;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.apache.solr.client.solrj.impl.HttpSolrClient;
    import org.apache.solr.common.SolrInputDocument;

    public class InsertProgarm {
    //solr 服务器地址
    public static final String solrServerUrl = "http://localhost:8080/solr";
    //solrhome下的core
    public static final String solrCroeHome = "my_solr";
    //待索引、查询字段
    public static String[] docs = {"Solr是一个独立的企业级搜索应用服务器",
    "它对外提供类似于Web-service的API接口",
    "用户可以通过http请求",
    "向搜索引擎服务器提交一定格式的XML文件生成索引",
    "也可以通过Http Get操作提出查找请求",
    "并得到XML格式的返回结果"};
    public static void main(String[] args) {
    SolrClient client = getSolrClient();
    int i=0;
    List<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>();
    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) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

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

    }
    -------查询数据------------
    package com.solr.insertData;

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

    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;

    public class SelectSolr {

    public static void main(String[] args) throws SolrServerException, IOException {
    String url = "http://localhost:8080/solr/my_solr";
    //实例化一个solr
    SolrClient solrClient = new HttpSolrClient(url);
    //查询实现类
    SolrQuery solrQuery = new SolrQuery();
    //查询关键词 q 管家你字段
    solrQuery.set("q", "id:2");
    //过滤条件
    //solrQuery.addFilterQuery("品牌");
    //拿出response当中的数据 结果集
    QueryResponse response = solrClient.query(solrQuery);

    SolrDocumentList results = response.getResults();
    //结果集有多少条数据
    long numFond = results.getNumFound();

    System.out.println("数据条数:"+numFond);

    for(SolrDocument solrDocument:results){
    String id = (String) solrDocument.get("id");
    List<String> contentTest = (List) solrDocument.get("content_test");
    System.out.println("id:"+id+"===content:"+contentTest);
    }
    }
    }

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

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

    [html] view plain copy
    在CODE上查看代码片派生到我的代码片

    <!-- Data Directory

    Used to specify an alternate directory to hold all index data
    other than the default ./data under the Solr home. If
    replication is in use, this should match the replication
    configuration.
    -->
    <dataDir>${solr.data.dir:}</dataDir>
    4、访问http://localhost:8080/solr/index.html选择【my_solr】core,选择query得到如下界面:
    选择【my_solr】core,选择query,点击【Execute Query】查询结果如下:
    其实其访问的url实际为:http://localhost:8080/solr/my_solr/select?q=*%3A*&wt=json&indent=true
    至于q、wt、indent等参数,代表的含义,可以搜索solr查询语法。
    那么至此,我们就将solr插件完毕,结合了core和创建索引、查询程序,完成!
    以上参考网址:http://blog.csdn.net/upxiaofeng/article/details/51426401
    ##############################################################################################三.配置中文分词器
    (IK)
    (1)将IKAnalyzer2012FF_u1.jar 复制到 D:JobsDBSolrsolr-Examplelib 目录以及Tomcat 6.0webappssolr-ExampleWEB-INFlib下面。

    (2)在D:JobsDBSolrsolr-Example 下面创建目录classes,并将IKAnalyzer.cfg.xml 和 stopword.dic 复制到这个目录。

    (3)配置之前从解压的Solr拷贝出来的solr文件夹下的配置文件。 即D:JobsDBSolrsolr-Examplecollection1conf目录下面的schema.xml配置文件。

    随便找一个fieldType配置项的后面,加入一个新的fieldType配置项。

    <!-- IKAnalyzer 中文分词器配置 -->
    <fieldType name="text_ik" class="solr.TextField">
    <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer">
    </analyzer>
    </fieldType>

  • 相关阅读:
    12.13 Redis缓存面试题精简版
    12.12 Oracle数据库相关面试题精简版(后续继续完善)
    1.131 IDEA2018版本64位激活
    7.11 读《如何阅读一本书》有感
    Linux下source命令详解(转载)
    Scala 随笔
    SparkStreaming实时流式大数据处理实战总结
    转载:hive的一些udaf
    IDEA的一些常见报错
    hive使用UDF函数
  • 原文地址:https://www.cnblogs.com/shenlanzhizun/p/6079219.html
Copyright © 2011-2022 走看看