Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

1.部署Solr到Tomcat(Windows)

Solr自带小型服务器jetty,但在我们开发环境中,习惯使用Tomcat,所以把Solr部署到Tomcat上(Tomcat 8.0以上,jdk 1.8以上)

其实步骤相同,但在windows配置要方便一些,所以第一次还是使用Windows来部署。

1.1 准备工作

下载Solr

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

下载 Tomcat

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

1.2 把 solr-7.5.0\server\solr-webapp下的webapp文件夹移到apache-tomcat-9.0.12\webapps下并改名solr(这个名字随便起)

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

1.3 导入运行时候需要的依赖包,把solr-7.5.0\server\lib\ext下的包放到apache-tomcat-9.0.12\webapps\solr\WEB-INF\lib下,

把solr-7.5.0\server\lib下m开头的五个jar和gmetric4j-1.0.7.jar放到apache-tomcat-9.0.12\webapps\solr\WEB-INF\lib下

1.4 在任意地方创建一个solrHome,里面有一个solrCore,个人和我们的数据库类似,一个用户下可以创建很多个不同的数据库

1.5 把solr-7.5.0\server下的solr文件夹下的内容复制到solrHome下

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

1.6 修改默认的solrHome,在apache-tomcat-9.0.12\webapps\solr\WEB-INF的web.xml修改 加上


solr/home
D:\Solr\solrHome
java.lang.String

env-entry-value写自己的solrHome位置

并注释以下这段话,不然会报403

 

1.7 把solr-7.5.0\server\resources的log4j2.xml放到apache-tomcat-9.0.12\webapps\solr\WEB-INF的classes文件夹下,classes文件刚开始没有,自己创建一个。

1.8 启动Tomcat

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

2.界面的简单介绍

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

2.1.Dashboard

仪表盘,显示了系统资源,jvm等信息

2.2.Logging

Solr运行的日志

2.3 Core Admin

Solr Core的管理页面

2.4 java properties

Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息

2.5 Thread Dump

显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息

3.创建一个solrCore

既然之前说类似于数据库,使用数据库之前肯定就要先创建数据库,我们使用Solr就要先创建一个solrCore,直接使用可视化界面创建

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

报错了,解决方法:solr-7.5.0\server\solr\configsets\_default下的config文件移到solrHome\new_core下

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

重启Tomcat

在点击下add core 就出现了

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

一个MySql实例可以创建多个数据库,所以我们当然可以创建多个solrCore啦

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

修改core.properties

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

重启Tomcat

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

4.Solr中的重要信息配置

在增删查改前,我们要先了解一点Solr的信息配置

在Lucenc中有域和索引的概念,域是由域名和域的内容构成的,域名经过分词,形成索引。

在Lucene中域是有类型的,比如StringField,LongField类型等,那么在Solr中域的类型由写在solrHome\new_core\conf\managed-schema中

4.1 fieldType 域类型

   













name:类型名字

class:指定该域类型对应的solr类型

analyzer:指定分词器(中文使用ikanalyzer)属性type index,query表示在创建索引和查询索引时使用的分词器

tokenizer:分词器的类型

filter:过滤器的类型

4.2 fieldtype 域


name:域的名字

type:域的类型(自己定义的)

indexed:是否索引

stroed:是否存储

required:是否必须

multiValued:是否多值

4.3 dynamicField 动态域


例子:为文档增加域的时候,你可以用 “随便起的_i”当做域名, 凡是以_i结尾的 type都是pint,需要indexed,需要stored

4.4 uniqueKey 唯一键

id

表示id唯一

5.配置中文分词器 ikanalyzer

既然要添加索引,添加索引之前需要luncenc帮我们分词,而官方的分词器对中文的分词基本是稀烂的,所以我们需要使用第三方的分词器 ikanalyzer

5.1 下载ikanalyzer

下载地址:https://github.com/magese/ik-analyzer-solr7

5.2 配置ikanalyzer

首先把ik-analyzer-7.5.0.jar放到apache-tomcat-9.0.12\webapps\solr\WEB-INF\lib目录下

然后:

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

5.3 使用ikanalyzer

在solrHome\new_core\conf\managed-schema中自定义fieldtype和field,使用中文分词器来分词

 






5.4 测试一下

重启tomcat

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

问题来了,我的名字没有加到词库,但是如果随着新的词语出现,我们就没办法分词了,ik分词器给我们提供了可以手动或自动加入词汇的方法

apache-tomcat-9.0.12\webapps\solr\WEB-INF\classes下的ext.dic加入自己的词汇,重启Tomcat

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

6.使用可视化界面增删查改文档

增加文档

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

更新文档

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

删除文档

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

查询文档

首先查询所有 *:*

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

加上过滤条件等一系列条件

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

q: 查询关键字 查询所有*:* 查询固定的 就用 域名:域值

fq:过滤查询

sort:排序 格式 : 先写域名然后加升序或降序 ,不同域用逗号隔开 id desc,title_ik desc

start row : 用于分页

fl:返回指定的域和域值,不同域用逗号隔开

df:指定一个搜索域,用处:比如有的时候查询,title上要查,content也要查,如果分开查需要两次请求,那么我们就把title内容和content内容放在一起,在起个名字,

那么我们就直接搜那个域和域的内容,只需要一次请求,我们可以在df中指定要搜索的域,然后直接在q中查

wt:指定输出格式

hi:是否高亮,在指定的域中,比如我搜索中国,经过分词,在title_ik域中找到了中国,那么在中国这两个字之前就加上pre前缀,在后面加上post后缀

7.使用SolrJ

Solr和SolrJ的关系类似于MySQL和JDBC,用java代码来完成文档的增加。

7.1坏境搭建


org.apache.solr
solr-solrj
7.5.0

7.2 代码

package com.dingyu.sSolrJ;
import java.io.IOException;
import org.apache.commons.math3.geometry.partitioning.BSPTreeVisitor.Order;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
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 org.junit.Test;
/**
* SolrJ的简单使用
*
* @author 丁宇
*
*/
public class SolrJTest {
/**
* 获得连接
*
* @return 连接对象
*/

private HttpSolrClient getClient() {
HttpSolrClient client = new HttpSolrClient.Builder("http://127.0.0.1:8080/solr/new_core").build();
return client;
}
/**
* 增加/修改文档
*
* @throws SolrServerException
* @throws IOException
*/
@Test
public void addOrUpdateDoc() throws SolrServerException, IOException {
// 获得连接对象
HttpSolrClient client = getClient();
// 创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
// 加域
document.addField("id", "521");
document.addField("title_ik", "张三说的在理");
// 提交
client.commit();
client.close();
}
/**
* 删除文档
*
* @throws SolrServerException
* @throws IOException
*/
@Test
public void deleteDoc() throws SolrServerException, IOException {
// 获得连接对象
HttpSolrClient client = getClient();
// 根据id删除
client.deleteById("521");
client.commit();
client.close();
}
/**
* 查询文档
* @throws SolrServerException
* @throws IOException
*/
@Test
public void selectDoc() throws SolrServerException, IOException {
// 获得连接对象

HttpSolrClient client = getClient();
// 搜索条件
SolrQuery query = new SolrQuery("*:*");
//设置过滤条件
query.setFilterQueries("title_ik:[10 TO 20]");
//排序
query.setSort("title_ik",ORDER.asc);
//分页
query.setStart(0);
query.setRows(10);
//要显示的域
query.setFields("id","title_ik");
// 设置默认搜索域
query.set("df", "product_name");
// 设置高亮
query.setHighlight(true);
query.addHighlightField("title_ik");
query.setHighlightSimplePre("");
query.setHighlightSimplePost("
");

//执行查询
QueryResponse response = client.query(query);
//查询结果,一个文档集合
SolrDocumentList results = response.getResults();
//遍历
for (SolrDocument solrDocument : results) {
//根据key 获得value
System.out.println(solrDocument.get("id"));
}
client.close();
}
}

7.3测试结果

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

Solr学习笔记——部署Solr到Tomcat上,可视化界面的介绍和使用

加Java架构师进阶交流群获取Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走很多的弯路的 群号是:883922439 对了 小白勿进 最好是有开发经验

注:加群要求

1、具有工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!


分享到:


相關文章: