一 solr:
1 是什么:
Lucene是API,类库,solr是基于Lucene开发一个web项目 它是基于Lucene的全文搜索服务器
2 Solr与Lucene的区别:
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,
Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,
以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,
通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
3 直接启动solr:内部集成了jetty服务器,所以可以直接启动。
在solr的bin目录下运行 solr.cmd start -p 8983
在solr的bin目录下运行 solr.cmd stop -p port即可关闭指定端口。
4 solr可以借助tomcat启动,把solr的war部署到tomcat,下面做详细讲解
二 安装配置solr
1 准备一个干净的tomcat 为了避免其他项目干扰 重新解压一个tomcat
2 把solr的工程war包(solr-4.10.3\dist\solr-4.10.3.war)拷贝到tomcat的webapps文件夹下
3 启动tomcat 会自动解压war成项目
4 配置solrHome,就相当于是配置索引库位置
1 把solr-4.10.3\example\solr下的所有文件拷贝到指定的位置D:\tools\SolrHome。
2 配置solr项目和solrHome的关系:修改solr项目的web.xml的第43行 到指定的外置 打开注解。
3 在solr项目下添加运行扩展包:日志包,ik分词器。
4 添加classes文件,ik的配置文件等。
5 重启启动tomcat
6 浏览器访问 localhost:8080/solr
solr的目录结构:
bin:solr的运行脚本
contrib:solr的一些贡献软件/插件,用于增强solr的功能。
dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
docs:solr的API文档
example:solr工程的例子目录:
example/solr:
该目录是一个包含了默认配置信息的Solr的Core目录。
example/multicore:
该目录包含了在Solr的multicore中设置的多个Core目录。
example/webapps:
该目录中包括一个solr.war,该war可作为solr的运行实例工程。
licenses:solr相关的一些许可信息
SolrHome是Solr运行的主目录,目录中包括了运行Solr实例所有的配置文件和数据文件(索引库),Solr实例就是SolrCore,
一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。
collection1:叫做一个Solr运行实例SolrCore,SolrCore名称不固定,一个solr运行实例对外单独提供索引和搜索接口。
solrHome中可以创建多个solr运行实例SolrCore。
一个solr的运行实例对应一个索引目录。
conf是SolrCore的配置文件目录。
conf文件夹下有一个solrconfig.xml。配置本实例的相关信息。如果使用默认配置可以不用做任何修改。
data目录存放索引文件需要创建
浏览器访问项目solr进入管理界面:
1 Dashboard
仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。
2 Logging
Solr运行日志信息 黄色警告没关系
3 Core Admin
Solr Core的管理界面。Solr Core是Solr的一个独立运行实例单位,它可以对外提供索引和搜索服务,
一个Solr工程可以运行多个SolrCore(Solr实例),一个Core对应一个索引目录。
添加solrcore:不要使用页面上的Add Core
第一步:复制collection1改名为collection2
第二步:修改core.properties 中 name=collection2
第三步:重启tomcat
4 java properties
Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。
5 Tread Dump
显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。
6 Core selector
选择一个SolrCore实例进行详细操作:
overView:概述
Analysis: 通过此界面可以测试索引分析器和搜索分析器的执行情况。solr中内置了很多的域名
注意:solr中的域名必须是先定义后使用的
Dataimport:数据导入 可以定义数据导入处理器,从关系数据库将数据导入 到Solr索引库中
Document:通过此菜单可以创建索引、更新索引、删除索引 /update不用动 json数据
Files:读取的本solrCore实例配置文件
ping:solr项目是否正常运行着 正常会在后面括号显示一个毫秒值
plugins:插件
query:做查询操作
replication:重置
五 一个solr core 相当于 mysql的一个database 每个项目不同的
添加solrcore:不要使用页面上的Add Core
第一步:复制collection1改名为collection2
第二步:修改core.properties 中 name=collection2
第三步:重启tomcat
三 使用solr控制台操作增删改查:
1 添加和修改 使用json格式
1 solr中的域名是先定义后使用的 未定义的域不能直接使用添加
2 在solr上添加文档的时候 一定要有id域
lucene中不用添加id 是自动生成的
3 /update表示更新索引 solr默认根据id(唯一约束域)来更新Document的内容 只要id相同就是被修改
如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。
2 删除 使用xml文件格式
1 删除指定ID的索引
<delete>
<id>8</id>
</delete>
<commit/>
2 删除查询到的索引数据
<delete>
<query>name:zhangsan</query>
</delete>
<commit/>
3 删除所有索引数据
<delete>
<query>*:*</query>
</delete>
<commit/>
3 查询
通过/select执行搜索索引,必须指定“q”查询条件(查询表达式)方可搜索
*:*:查询所有
q:查询条件
fq:过滤掉查询结果中id为1的 id:1 在q查询符合结果中同时是fq查询符合的
sort: 按照id升序 id asc/
start,rows:分页
fl:id title 显示要显示的列/域
df:可以指定默认查询的域 查询条件就可以简写了
wt:写出的数据格式 json xml等
hl:enable highlight 高亮显示
fl:要高亮显示的列
hl.simple.pre:开始标签 <span color="red">
hl.simple.post:</post>
四 java代码操作solr---- 使用solrJ
SolrJ:solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,
通过SolrJ的API接口操作Solr服务
1 创建工程
2 添加jar
solrJ核心包solr-4.10.3\dist\solr-solrj-4.10.3.jar、
solrJ扩展包solr-4.10.3\dist\solrj-lib下的所有
solr的扩展包solr-4.10.3\example\lib\ext下的所有的日志文件
3 和Solr服务器建立连接。HttpSolrServer对象建立连接。做增删改查操作
4 创建一个SolrInputDocument对象,然后添加域。
添加:
//和solr服务器创建连接
//参数:solr服务器的地址
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
//向文档中添加域
//第一个参数:域的名称,域的名称必须是在schema.xml中定义的
//第二个参数:域的值 复制域的内容不会存储
document.addField("id", "c0001");
document.addField("title", "使用solrJ添加的文档");
document.addField("content", "文档的内容");
document.addField("name", "商品名称");
//把document对象添加到索引库中
solrServer.add(document);
//提交修改
solrServer.commit();
删除:
//创建连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//根据id删除文档 根据条件删除文档
solrServer.deleteById("c0001")/solrServer.deleteByQuery("id:5");
//提交修改
solrServer.commit();
修改:
在solrJ中修改没有对应的update方法,只有add方法
只需要添加一条新的文档,和被修改的文档id一致就,可以修改了。本质上就是先删除后添加的。
查询:
//创建连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//创建一个query对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery("*:*");
//执行查询
QueryResponse queryResponse = solrServer.query(query);
//取查询结果 ArrayList的子类 遍历同ArrayList
SolrDocumentList solrDocumentList = queryResponse.getResults();
//共查询到商品数量
System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());
//遍历查询的结果
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("name"));
System.out.println(solrDocument.get("content"));
}
|
|