学习主题:Solr
学习目标:
1. Solr索引库-Solr的索引机制
(1) Solr索引库-Solr的索引机制
(2) 什么是倒排索引?
答:对数据进行分析,抽取出数据中的词条,以词条作为 key,对应数据的存储位置作为value,实现索引的存储
2. Solr索引库-配置中文分词器
(1) 中文分词器IK Analyzer的作用什么是?
答:进行中文分词用的
(2) 如何为Solr配置中文分词器?
上传中文分词器 jar 包,以及配置文件
将中文分词器的配置文件以及 jar包拷贝到 Solr 所对应的目录下
在 schema.xml 中配置中文分词器
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
3. Solr管理界面介绍
(1) Dashboard的作用是什么?
答:展示的都是一些solr的基本信息:Solr实例开始启动运行的时间、版本、系统资源、jvm等信息
(2) Logging的作用是什么?
答:显示 solr 运行出现的异常或错误
(3) Core Admin的作用是什么?
答:核心库的管理
(4) Java Properties的作用是什么?
答:Solr在JVM 运行环境中的属性信息
(5) Thread Dump的作用是什么?
答:查看每个线程的详细信息,以及状态信息
(6) Core Selecter(core选择器)的作用是什么?
答:选择核心库
(7) Core Selecter(core选择器)的作用是什么?
答:同上
(8) Analysis(分析)的作用是什么?
答:检验分词效果
(9) Dataimport(导入数据)的作用是什么?
答:可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。默认没有配置,需要手工配置
(10) Documents的作用是什么?
答:Documents (索引文档)索引的相关操作,如:增加,修改,删除等
(11) Files文件夹的作用是什么?
答:solr_home 下的 core 下的 conf 下的相关文件,可单击查看里面的内容 (就是/usr/local/solrhome/solr/collection1/conf下的文件)
(12) Ping的作用是什么?
答:查看当前核心库还是否工作的以及响应时间
(13) Plugins /stats的作用是什么?
答:Solr 自带的一些插件以及我们安装的插件的信息以及统计
(14) Query(查询页面)的作用是什么?
答:查询
(15) Replication的作用是什么?
答:显示你当前 Core 的副本,并提供 disable/enable 功能
(16) Schema的作用是什么?
答:展示该 Core 的 shema.xml 文件中的内容
4. 测试SolrJ-创建项目添加依赖
(1) 什么是SolrJ?
答:solrJ 是访问 Solr 服务的 JAVA 客户端,提供索引和搜索的请求方法
5. 测试SolrJ-添加文档
(1) 如何通过SolrJ向索引库中添加文档?
package com.bjsxt.test;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
public class Test {
public static void main(String[] args) throws Exception {
solrInsert();
}
/**
* 向索引库中添加文档
* @throws Exception
* @throws
*/
public static void solrInsert() throws Exception {
//创建solrJ的连接对象
SolrServer server = new HttpSolrServer("http://192.168.63.133:8080/solr");
//创建一个solr的文档对象
SolrInputDocument docu = new SolrInputDocument();
//向文档对象中添加我们要插入到索引库中的内容
docu.addField("id", "OldLu");
docu.addField("item_title", "老好了");
docu.addField("item_price", 1000);
//将为文档插入到solr的索引库中
server.add(docu);
//事务的提交
server.commit();
}
}
6. 测试SolrJ-删除文档
(1) 如何通过SolrJ删除索引库中的文档?
/**
* 删除索引库中的文档
* @throws Exception
* @throws
*/
public static void solrDelete() throws Exception {
//创建solrJ的连接对象
SolrServer server = new HttpSolrServer("http://192.168.63.133:8080/solr");
//给定删除条件
//1.根据主键删除
// server.deleteById("test");
//2.根据查询删除
server.deleteByQuery("*:*");//写条件
server.commit();
}
7. 测试SolrJ-查询文档
(1) 如何通过SolrJ查询索引库中的文档?
/**
* 查询索引库
* @throws Exception
*/
public static void solrSearch() throws Exception {
//创建solrJ的连接对象
SolrServer server = new HttpSolrServer("http://192.168.63.133:8080/solr");
//创建查询条件
SolrQuery query = new SolrQuery();
//给定查询的内容
query.setQuery("老好了0");
//去哪个field里面查 df:default field
query.set("df", "item_keywords");
//设置分页
query.setStart(0);
query.setRows(10);
//执行查询
//QueryResponse:封装了查询的结果集
QueryResponse res = server.query(query);
SolrDocumentList list = res.getResults();
//list.getNumFound():数据的总条数
System.out.println("数据的总条数:"+list.getNumFound());
for (SolrDocument solrDocument : list) {
System.out.println(solrDocument.get("item_title"));
System.out.println(solrDocument.get("item_price"));
}
}