zoukankan      html  css  js  c++  java
  • solr 6.1 服务端 tomcat 搭建及调用

    一、下载

    apache solr6.1.0 最新版本zip,解压缩生成一个solr6.1.0文件夹

    二、安装

    1、在d:/projects下新建一个solr

    2、把solr6.1.0/server/solr复制到d:/projects/solr/下,并把文件夹改为home,即d:/projects/solr/home.

    3、复制一个tomcat文件夹在d:/projects/下,并改名为:d:/projects/server

    4、把solr-6.1.0serversolr-webappwebapp复制到D:projectssolrserverwebapps下,并改名为

    solr,即为: D:projectssolrserverwebappssolr

                    

    5、修改tomcat配置文件,D:projectssolrserverconfserver.xml:

    在<Host name="localhost"  appBase="webapps"

                unpackWARs="true" autoDeploy="true">下添加:

    <Context path="" docBase="solr" reloadable="false" crossContext="true">

                                <Environment name="solr/home" type="java.lang.String" value="D:projectssolrhome" override="true"/>

                       </Context>

    这里的docBase=”solr”,对应D:projectssolrserverwebappssolr 这里的文件夹中的solr;

    value=””上面第2条中的地址。

    6、把solr-6.1.0.0serverlibext中的所有jar包得制到tomcatlib下(即D:projectssolrserverlib)。

    7、启动tomcat--------------------------

    8、浏览器中输入地址:http://localhost:8080/index.html

    三、配置

             core配置

    1、  把D:projectssolrhomeconfigsetsasic_configs文件夹复制到D:projectssolrhome下,并改名为core1,即D:projectssolrhomecore1

    2、  在浏览器中,选择core admin,点击add core,输入一下下内容,instanceDir一定要写为上面一步中修改后的文件夹名。

    solrconfig.xml 和  managed-schema 两个文件在 D:projectssolrhomecore1conf 中

     

    solr管理界面登录权限配置(

    注:

    权限配置 最好先别配置 等 测试代码连接到 solr 并成功返回后 再尝试配置

    )

             1、修改tomcat的tomcat-user.xml ,</tomcat-user>上面添加:

    <role rolename="solr"/>

    <user username="admin" password="admin" roles="solr"/>

    3、  修改solr项目中的D:projectssolrserverwebappssolrWEB-INF web.xml, 在</web-app>上面添加:

      <security-constraint>

        <web-resource-collection>

               <web-resource-name>Solr Lockdown</web-resource-name>

               <url-pattern>/</url-pattern>

    </web-resource-collection>

    <auth-constraint>

               <role-name>solr</role-name>

               <role-name>admin</role-name>

    </auth-constraint>

      </security-constraint>

      <login-config>

    <auth-method>BASIC</auth-method>

    <realm-name>Solr</realm-name>

      </login-config>

    3、重新启动tomcat,再使用管理界面就必须要输入用户名/密码(admin/admin)了。

    客户端访问权限控制

    在D:projectssolrserverwebapps下创建:communityserver_override.config,内容如下:

    <?xml version="1.0" encoding="utf-8"?>

    <Overrides>

    <Override xpath="/CommunityServer/Search/Solr" mode="change" name="host" value="http://localhost:8080" />

    </Overrides>

    value的值为浏览器中访问地址?待确认.

    四、中文分词器

    mmseg4j中文分词器

    1、  从网上maven库下载最新版本: mmseg4j-core-1.10.0.jar; mmseg4j-solr-2.3.0.jar(中有这二个jar, mmseg4j-analysis-1.9.1.jar不能放,否则会报java.lang.NoSuchMethodError: com.chenlb.mmseg4j.analysis.MMSegTokenizer.<init>(Lcom/chenlb/mmseg4j/Seg;)V错误,因为mmseg4j-solr-2.3.0已经包含了mmseg4j-analysis)。放在D:projectssolrserverwebappssolrWEB-INFlib下。

    2、 

    配置schema.xml。

    schema.xml的配置也挺简单,首先需要在schema.xml文件中配置一个fieldType节点,如下:

    <!-- mmseg4j -->
    <fieldType name="text_zh" class="solr.TextField" positionIncrementGap="100">
    <span style="white-space:pre"> </span><analyzer>
    <span style="white-space:pre"> </span><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" />
    <span style="white-space:pre"> </span></analyzer>
    </fieldType>

    然后就可以在field节点中引用该filedType了,假设你有个字段叫keyWord需要支持中文分词,只需要定义示例filed节点如下:

    <field name="keyWord" type="text_zh" indexed="true" stored="false" multiValued="true"/>

     

    五、使用solrj操作solr

             1、URL不可以带admin.html

             2、SolrInputDocument中的字段,必须在core1/conf/managed-schema中有对应的field

        3、必须先创建索引,查询才有数据

        4、如果有走http协议(使用httpclient操作)有管理密码(web.xml中的配置),会报: This request requires HTTP authentication.

             package com.test;

      5、如果  出现   以下相关异常报错

        servlet [default] in context with path [/solr] threw exception
     org.apache.solr.common.SolrException: Error processing the request. CoreContainer is either not initialized or shutting down.
        at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:217)
        at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)

      解决方案:

      可以在D:projectssolrserverwebappssolr目录中创建 lib目录然后将solr解压开的文件夹dist中jar包和contribvelocitylib
    下的jar拷贝到该新创建的lib目录就可以了。(注:是把 dist目录和 contribvelocitylib 下的所有jar 包括子目录里的 jar 全部复制到  D:projectssolrserverwebappssolrlib 中  lib中所有jar都是平级的 lib 下没有子目录)

     

    以下java 代码进行连接  查询测试

    需要引用  两个jar 文件 在项目的 pom   文件中 添加 如下代码:

    <dependency>
            <groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>6.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.solr</groupId><artifactId>solr-core</artifactId><version>6.1.0</version>
        </dependency>

    <!--可能还会需要下面这个 如果你的pom文件报了这个错的话  可能还会报 org.restlet-2.3.0.jar 这个文件找不到   下载一个到你的maven本地仓库 就可以了-->

    <dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.6</version>
    <scope>system</scope>
    <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
    </dependency>

     

     注: 如果配置了 访问权限  下面在连接的时候 会报错 

      如果想要在有用户名密码的环境下连接使用  则以下代码在 连接的时候  需要添加  http的用户名密码 验证(具体添加方法 自行网络搜索 )

      另:安全配置除了 添加用户名密码 外 还需要 绑定  允许访问的ip地址 为localhost 127.0.0.1 或者服务器 真实Ip地址  防止 被恶意攻击

      绑定方法 自行 网络搜索

     

    import org.apache.solr.client.solrj.*;

    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 url

        public static final String URL = "http://localhost:8080/solr";

        //solr应用

        public static final String SERVER = "core1";

        //待索引、查询字段                                                                                             http://localhost:8080/solr53/#/connection1

        public static String[] docs = {"Solr是一个独立的企业级搜索应用服务器",

                                        "它对外提供类似于Web-service的API接口",

                                        "用户可以通过http请求",

                                         "向搜索引擎服务器提交一定格式的XML文件生成索引",

                                        "也可以通过Http Get操作提出查找请求",

                                        "并得到XML格式的返回结果"};

     

        public static SolrClient getSolrClient(){

        System.out.println(URL+"/"+SERVER);

            return new HttpSolrClient(URL+"/"+SERVER);

        }

     

        /**

         * 新建索引

    * 就是 把数据放到 solr中  以便搜索查询  可以单独写一个方法 导入

    *最好是  配置solr 连接数据库  自动导入相关数据到索引库(没有配置好 如果你有完整的配置 方法  欢迎留言)

         */

        public static void createIndex(){

            SolrClient client = getSolrClient();

            int i = 0;

            List<SolrInputDocument> docList = new ArrayList<SolrInputDocument>();

            for(String str : docs){

                SolrInputDocument doc = new SolrInputDocument();

                doc.addField("id",i++);

                doc.addField("content", str);//需要在core1/conf/managed-schema中有对应的field

                docList.add(doc);

            }

            try {

                client.add(docList);

                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:搜索");

            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"));

        //配置分词后

                }

            } catch (SolrServerException e) {

                e.printStackTrace();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

     

        public static void main(String[] args) {

    //        createIndex();

            search();

        }

    }

  • 相关阅读:
    linux内核剖析(六)Linux系统调用详解(实现机制分析)
    Linux内核剖析(五)Linux内核的构建过程
    Linux内核剖析(四)为arm内核构建源码树
    Linux内核剖析(三)构建源码树
    Linux内核剖析(二)Linux内核绪论
    kubectl更新镜像和回滚命令
    Linux登录shell和非登录(交互式shell)环境变量配置
    Elasticsearch7.6学习笔记1 Getting start with Elasticsearch
    docker安装Elasticsearch7.6集群并设置密码
    Jenkinsfile里定义对象和函数,获取git提交人, 发送钉钉通知
  • 原文地址:https://www.cnblogs.com/feiye512/p/5630684.html
Copyright © 2011-2022 走看看