Solr简单总结
Solr
运行Solr服务
方式一:Jetty服务器启动Solr
- 进入solr-4.10.2/example目录
- 打开命令行,执行java –jar start.jar命令,即可启动Solr服务
- 打开浏览器,通过http://localhost:8983/solr来访问Solr管理页面。
方式二:Tomcat服务器启动Solr
- 部署Web服务,将solr-4.10.2/example/webapps/solr.war复制到自己的tomcat/webapps目录中,并解压,然后删除solr.war文件
- 在Tomcat中加入相关jar包:将“resource\solr在tomcat运行需要导入的jar包\lib”下的jar包复制tomcat/webapps/solr/WEB-INF/lib下。
并且把class/log4j.properties复制到tomcat/webapps/solr/WEB-INF下 - 修改Tomcat配置文件,指向Solr的索引库及配置目录。
注意,这里可以指向solr-4.10.2/example/solr目录,如果想独立出来,也可以将这个solr文件夹复制出来到任意位置(不要出现中文),例如:例如:C:/tmp/solr - 进入Tomcat文件夹,用记事本打开:tomcat/bin/catalina.bat文件,添加一条配置信息,指向我们的索引库及配置目录:set "JAVA_OPTS=-Dsolr.solr.home=C:/tmp/solr"
- 进入tomcat/bin目录,双击 startup.bat文件启动服务器
- 打开浏览器,访问http://localhost:8080/solr 进入Solr管理页面
Solr管理页面

Dashboard仪表盘
显示solr服务及系统运行信息
Logging(日志)
solr运行的日志信息
Core Admin(Core管理)
在Solr中,每一个Core,代表一个索引库,里面包含索引数据及其配置信息。
Solr中可以拥有多个Core,也就同时管理多个索引库!就像在MySQL中可以有多个database一样!
JavaProperties
Java运行环境信息
ThreadDump
solr运行线程信息
CoreSelector(Core选择器)




schema.xml
注意:在本文件中,有两个字段是Solr自带的字段,绝对不要删除:_version_节点和_root_节点
Field字段定义字段的属性信息段
属性及含义:
name:字段名称,最好以下划线或者字母开头
type:字段类型,指向的是本文件中的标签
indexed:是否创建索引
stored:是否被存储
multiValued:是否可以有多个值,如果字段可以有多个值,设置为true
FieldType指定数据类型
属性及含义:
name:字段类型的名称,可以自定义,标签的type属性可以引用该字段,来指定数据类型
class:字段类型在Solr中的类。StrField可索引不可分词。TextField字段可索引,可以分词,所以需要指定分词器
:这个子标签用来指定分词器
唯一主键id
Lucene中本来是没有主键的。删除和修改都需要根据词条进行匹配。而Solr却可以设置一个字段为唯一主键,这样删改操作都可以根据主键来进行!
IK分词器
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
SolrJ的使用
添加或修改索引库数据
private static String baseURL = "http://localhost:8080/solr/core1";
@Test
public void createTest() throws Exception {
//连接solr服务器
HttpSolrServer solrServer = new HttpSolrServer(baseURL);
//创建文档对象
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "5");
document.addField("title", "8848手机,钛合金外壳,注定不平凡");
document.addField("content", "8848发发发");
//向solr服务器写入文档
solrServer.add(document);
solrServer.commit();
}
@Test
public void create2Test() throws Exception {
//连接solr服务器
HttpSolrServer solrServer = new HttpSolrServer(baseURL);
//创建文档对象
Item item = new Item();
item.setId("6");
item.setTitle("金立M2017成功人士的标配");
item.setContent("金立你值得拥有");
//向solr服务器写入文档
solrServer.addBean(item);
solrServer.commit();
}
//添加@Field注解
public class Item{
@Field
private String id;
@Field
private String title;
@Field
private String content;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
删除索引库数据
@Test
public void deleteTest() throws SolrServerException, IOException {
// 连接solr服务器
HttpSolrServer solrServer = new HttpSolrServer(baseURL);
// 删除索引
//solrServer.deleteById("6");
solrServer.deleteByQuery("title:金立");
// 提交
solrServer.commit();
}
查询索引库数据
在创建SolrQuery时,我们填写的Query语句,可以有以下高级写法:
- 通配符?和 *:“*”表示匹配任意字符;“?”表示匹配出现的位置
- 布尔操作:AND、OR和NOT布尔操作(推荐使用大写,区分普通字段)
- 子表达式查询(子查询):可以使用“()”构造子查询。比如:(query1 AND query2) OR (query3 AND query4)
- 相似度查询:指定编辑距离的相似度查询:对模糊查询可以设置编辑距离,可选0-2的整数(默认为2):title:appla~1。
- 范围查询(Range Query):Lucene支持对数字、日期甚至文本的范围查询,并且两端范围。结束的范围可以使用“*”通配符。
(1)日期范围(ISO-8601时间GMT):a_begin_date:[1990-01-01T00:00:00.000Z TO 1999-12-31T24:59:99.999Z]
(2)数字:salary:[2000 TO *]
(3)文本:entryNm:[a TO a]
@Test
public void queryTest() throws SolrServerException{
// 连接solr服务器
HttpSolrServer solrServer = new HttpSolrServer(baseURL);
//创建查询条件对象
SolrQuery params = new SolrQuery("*:*");
//执行查询,获取响应数据
QueryResponse response = solrServer.query(params);
//获取数据结果集
SolrDocumentList list = response.getResults();
System.out.println("一共获取了" + list.size()+"条结果:");
for (SolrDocument solrDocument : list) {
System.out.println("id: " + solrDocument.getFieldValue("id"));
System.out.println("title:" + solrDocument.getFieldValue("title"));
}
}
@Test
public void queryBeanTest() throws SolrServerException{
// 连接solr服务器
HttpSolrServer solrServer = new HttpSolrServer(baseURL);
//创建查询条件对象
SolrQuery params = new SolrQuery("*:*");
//执行查询,获取响应
QueryResponse response = solrServer.query(params);
List<Item> beans = response.getBeans(Item.class);
System.out.println("一共获取了" + beans.size()+"条结果:");
for (Item item : beans) {
System.out.println("id: " + item.getId());
System.out.println("title:" + item.getTitle());
}
}
实现排序
@Test
public void querySortTest() throws SolrServerException, IOException {
// 连接solr服务器
HttpSolrServer solrServer = new HttpSolrServer(baseURL);
// 创建查询条件对象,范围查询,包含两端
SolrQuery query = new SolrQuery("*:*");
// 设置查询的排序参数,1-排序的字段名,2-排序方式(ORDER:asc desc)
query.setSort("id", ORDER.asc);
// 执行查询,获取响应数据
QueryResponse response = solrServer.query(query);
// 获取结果集数据
List<Item> list = response.getBeans(Item.class);
System.out.println("总记录数 numFound:"+response.getResults().getNumFound());
for (Item item : list) {
System.out.println("id: " + item.getId());
System.out.println("title:" + item.getTitle());
}
}
实现分页
@Test
public void queryPageTest() throws SolrServerException, IOException {
// 准备分页参数
int pageNum = 1; //页码
int pageSize = 2; //每页条数
// 连接solr服务器
HttpSolrServer solrServer = new HttpSolrServer(baseURL);
// 创建查询条件对象
SolrQuery params = new SolrQuery("*:*");
// 设置查询的排序参数,1-排序的字段名,2-排序方式(ORDER:asc desc)
params.setStart((pageNum-1)*pageSize);//设置起始条数
params.setRows(pageSize);//设置每页条数
// 执行查询,获取响应数据
QueryResponse response = solrServer.query(params);
// 获取结果集数据
SolrDocumentList list = response.getResults();
System.out.println("一共获取了" + list.size() + "条结果:");
for (SolrDocument solrDocument : list) {
System.out.println("id: " + solrDocument.getFieldValue("id"));
System.out.println("title:" + solrDocument.getFieldValue("title"));
}
}
实现高亮
@Test
public void highLightingTest() throws SolrServerException, IOException{
// 初始化solrj服务
HttpSolrServer server = new HttpSolrServer(baseURL);
// 设置查询条件
SolrQuery params = new SolrQuery("title:手机");
// 设置前置标签
params.setHighlightSimplePre("<em >");
// 设置后置标签
params.setHighlightSimplePost("</em>");
// 添加高亮字段
params.addHighlightField("title");
// 执行查询
QueryResponse queryResponse = server.query(params);
// 外层的Map,key:id,value:id以外的其他高亮字段,可能有多个,也是一个Map
// 内层的Map,key:高亮字段的名称,value:字段的内容,集合
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
// 遍历map,获取结果
Set<String> ids = highlighting.keySet();
for (String id : ids) {
System.out.println("id: " + id);;
// 获取高亮字段的集合
Map<String, List<String>> map = highlighting.get(id);
// 获取高亮字段
System.out.println(map.get("title").get(0));
// 因为content不是高亮字段,所以打印出的内容为null
System.out.println(map.get("content"));
}
}
Solr简单总结的更多相关文章
- solr简单搜索案例
solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...
- apache solr简单搭建
首先,下载位置是:http://lucene.apache.org/solr/downloads.html 官网的学习资料:http://lucene.apache.org/solr/quicksta ...
- solr 简单搭建 数据库数据同步(待续)
原来在别的公司负责过文档检索模块的维护(意思就是不是俺开发的啦). 所以就略微接触和研究了下文档检索. 文档检索事实上是全文检索.是通过一种技术把N多文档进行一定规律的分割归类,然后创建易于搜索的索引 ...
- Solr简单部署
因为公司最近涉及这个项目,想了解一下,以便提供更好的支持.. 参考URL: http://www.centoscn.com/CentosServer/test/2014/1127/4193.html ...
- Solr简单使用
1.添加索引 // 第一步:把solrJ的jar包添加到工程中. // 第二步:创建一个SolrServer,使用HttpSolrServer创建对象. SolrServer solrServer = ...
- Maven和Solr简单总结
一.1.Maven介绍 Maven是一个项目管理工具,Maven通过POM项目对象模型,对象项目进行管理,通过一个配置文件(xml文件)进行项目的管理.对象项目的声明周期中每个阶段进行管理(清理,编译 ...
- Solr简单测试
import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; impor ...
- solr学习篇(四) java使用solr简单查询(初识solrj)
使用java实现solr查询 目录:1:导入jar包 2:核心类介绍 3:代码实现 4:注意事项 一 导入jar包 solrj可以使Java应用程序很方便的访问与操作solr. solrj有几个核心类 ...
- solr简单学习---1
*服务器配置略,比较复杂,看视频 1.导入jar包 package cn.itcast.solr; import org.apache.solr.client.solrj.SolrServer; im ...
随机推荐
- 狂欢圣诞节,Azure云邀你一起云端跑酷!
想要速度更快? 希望绕过障碍? 还想安全抵达目的地? …… 平安夜夜游时的各种畅想,不也正是 IT 同事所追求的,更是业务发展的终极目标呀. 好啦,小编说的太多了,这样不好不好.过节休息不谈工作,那就 ...
- JavaScript 三种工厂模式
标签(空格分隔): JavaScript 简单工厂模式是工厂函数返回实例化对象或者对象,工厂函数作为一个方法. 工厂方法模式是工厂函数不作改变,将子类放在工厂原型中:工厂函数返回对应的实例化对象:re ...
- PHP腾讯与百度坐标转换
function coordinate_switch($a,$b){//百度转腾讯坐标转换 $a = Latitude , $b = Longitude $x = (double)$b - 0.006 ...
- 【Spring实战】—— 7 复杂集合类型的注入
之前讲解了Spring的基本类型和bean引用的注入,接下来学习一下复杂集合类型的注入,例如:List.Set.Map等. 对于程序员来说,掌握多种语言是基本的技能. 我们这里做了一个小例子,程序员们 ...
- NodeJs安装less(npm方式)
上一次讲了如何在浏览器端解析less文件,这次是在cmd中使用npm中的less模块来解析 详解如下 首下我们去下载一个https://nodejs.org/en/, 一路next之后,因为文件不 ...
- vue 单页应用中微信支付的坑
vue 单页应用中微信支付的坑 标签(空格分隔): 微信 支付 坑 vue 场景 在微信H5页面(使用 vue-router2 控制路由的 vue2 单页应用项目)中使用微信 jssdk 进行微信支付 ...
- 论C/C++数据在内存中的二进制存放形式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010518429/article/details/30332237 // enter any ty ...
- 【HHHOJ】ZJOI2019模拟赛(十六)4.07 解题报告
点此进入比赛 得分: \(100+100+100=300\) 排名: \(Rank\ 1\) \(Rating\): \(+13\)(\(\frac18Rated\)) 备注: 这场比赛全是做过的原题 ...
- 行云管家V4.9正式发布:监控全面提升,首页、主机详情大幅优化,新增大量实用功能.md
让大家久等啦!4.9版本中我们对监控模块进行了重构,在数据准确性与稳定性方面做了大幅提升.我们也对首页及主机详情页面做了大幅重构,以追求为您提供极致的用户体验.同时我们在新版本中增加了如:运维报表.用 ...
- SignalR集成Autofac
SignalR SignalR集成需要 Autofac.SignalR NuGet 包. SignalR 集成提供SignalR 集线器的依赖集成.由于 SignalR 是内部构件,所以不支持Sign ...