solr基本操作步骤
@TOC
1、solr基本操作
1.1、基本概念
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化
- solr就是在lucene工具包的基础之上进行了封装,而且是以web服务的形式对外提供索引功能
- 业务系统需要使用到索引的功能(建索引,查索引)时,只要发出http请求,并将返回数据进行解析即可
什么情况下会使用solr
要查询的内容经常涉及多张表,优先把数据查了放入solr里面,之后就不需要经常去数据库里反复联表查询
1. 2、基本操作solr
- 下载地址:http://lucene.apache.org/solr/
- 解压压缩包。
- 进入解压目录下的bin目录,在此目录下打开命令行,输入命令solr.cmd start
- 启动solr服务器,服务默认端口8983
出现happy 即可
和redis不一样,这个启动之后可以关掉 - 访问localhost:8983,进入solr界面
- 创建solr core。
注1:solr会在解压目录下的server/solr目录中自动创建与命名相同的文件夹
注2: 但创建会报错, 因为缺少必要的配置文件. 需要在解压目录下的server/solr/configsets/_default目录中复制conf文件夹, 并粘贴到刚刚创建的文件夹中. 然后重新点击add core. - 选择创建好的core, 点击schemaadd field添加属性到core
添加add core会报错
6、选中创建好的core,点击schema——add field添加属性到core
solr数据库没有表的概念,不依赖于类,而独立存在,可以创建属性,所以数据添加的时候可以根据需要创建
因为没有表和类,不需要同名属性,所以命名为表名_属性名,这样就可以知道如何对标哪个表
7、选择documents,在document type中选择document builder,然后选择需要添加的属性,并且赋值,所有属性设置完毕后,点击submit添加
属性的添加时独立的,不需要考虑是哪个表
8、选择query,并设置相关查询要求进行查询
必然是有的,ID永远不会重复
1 3、(中文)分词查询
1、进入需要设置中文分词的core的conf文件夹,变价solrconfig.xml文件,添加如下内容
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" regex="lucene-analyzers-smartcn-\d.*\.jar" />
2、编辑同文件夹中的managed-schema文件,添加内容如下
添加一个属性和分词定义
![在这里插入图片描述]
3、重启solr服务器solr.cmd stop -p 8983
启动solr.cmd start
4、在schema里添加一个file
选中刚刚添加进去的类型
可以去analysis进行测试
按照字符串进行匹配
按照自定义的类型匹配
1.4数据导入
1、编辑solrconfig.xml文件,添加如下内容
<lib dir="${solr.install.dir:../../../..}/dist" regex="solr-dataimporthandler-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist" regex="solr-dataimporthandler-extras-\d.*\.jar" />
2、将需要使用的数据库jdbc jar包添加到解压目录的server\solr-webapp\webapp\WEB-INF\lib
版本不重要
3、编辑solrconfig.xml文件,添加如下内容
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"><lst name="defaults"><!--datasorce config--><str name="config">data-config.xml</str></lst></requestHandler>
4、在同目录下,添加data-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig><dataSource type="JdbcDataSource" name="userSource"driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solr" user="root" password="111111"/><document><entity name="user" pk="u_id" dataSource="userSource"query="SELECT u_id,u_userName,u_password,u_content FROM t_user "><field column="u_id" name="user_id"/><field column="u_userName" name="user_userName"/><field column="u_password" name="user_password"/><field column="u_content" name="user_content"/></entity></document>
</dataConfig>
配置至少两个节点
datasource是源数据节点,原则上讲可以配置多个DataSource去连接多个数据库
document对应solr创建的数据,里面是对应的实体类配置
pk是主键,字段对应属性
5、在solr服务器中添加所有必要的属性
6、重启服务器,选择dataimport——execute导入数据库文件
打开MySQL
创建一个简单的数据库
重启solr服务器-execute
再次refresh就可以看到数据导入了
2、代码实操
2.1创建项目,添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.szxs</groupId><artifactId>SolrDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj --><dependency><groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>7.3.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.7</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>compile</scope></dependency></dependencies>
</project>
2.2、注释
在属性上添加@Field(“product_id”)
import org.apache.solr.client.solrj.beans.Field;public class Product {@Field("product_id")private int product_id;@Fieldprivate String product_name;@Fieldprivate double product_price;@Fieldprivate String product_desc;public Product() {}public Product(int product_id, String product_name, double product_price, String product_desc) {this.product_id = product_id;this.product_name = product_name;this.product_price = product_price;this.product_desc = product_desc;}public int getProduct_id() {return product_id;}public void setProduct_id(int product_id) {this.product_id = product_id;}public String getProduct_name() {return product_name;}public void setProduct_name(String product_name) {this.product_name = product_name;}public double getProduct_price() {return product_price;}public void setProduct_price(double product_price) {this.product_price = product_price;}public String getProduct_desc() {return product_desc;}public void setProduct_desc(String product_desc) {this.product_desc = product_desc;}
}
2.3、应用
import org.apache.solr.client.solrj.SolrQuery;
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 java.io.IOException;
import java.util.Arrays;
import java.util.List;public class SolrTest {//指定solr服务器的地址private final static String SOLR_URL = "http://localhost:8983/solr/user_core";/*** 创建SolrServer对象** 该对象有两个可以使用,都是线程安全的* 1、CommonsHttpSolrServer:启动web服务器使用的,通过http请求的* 2、 EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了* 3、solr 4.0之后好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为HttpSolrClient** @return*/public HttpSolrClient createSolrServer(){HttpSolrClient solr = null;solr = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();return solr;}/*** 往索引库添加文档* @throws IOException* @throws SolrServerException*/public void addDoc() throws SolrServerException, IOException{//构造一篇文档(对象)SolrInputDocument document = new SolrInputDocument();//往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义document.addField("product_id", "100");document.addField("product_name", "小白菜");document.addField("product_price", "99.8");document.addField("product_desc", "我就是一颗小白菜,长也长不大");//获得一个solr服务端的请求,去提交 ,选择具体的某一个solr coreHttpSolrClient solr = new HttpSolrClient.Builder(SOLR_URL ).build();solr.add(document);solr.commit();solr.close();}public void addDoc(Product product) throws SolrServerException, IOException{//构造一篇文档(对象)SolrInputDocument document = new SolrInputDocument();//往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义document.addField("product_id", product.getProduct_id());document.addField("product_name", product.getProduct_name());document.addField("product_price", product.getProduct_price());document.addField("product_desc", product.getProduct_desc());//获得一个solr服务端的请求,去提交 ,选择具体的某一个solr coreHttpSolrClient solr = new HttpSolrClient.Builder(SOLR_URL ).build();solr.add(document);solr.commit();solr.close();}/*** 根据id从索引库删除文档*/public void deleteDocumentById() throws Exception {//选择具体的某一个solr coreHttpSolrClient server = new HttpSolrClient.Builder(SOLR_URL ).build();//删除文档//server.deleteById("036cd386-fbb0-4dde-8c47-f580b938538e");server.deleteByQuery("product_id:100");//删除所有的索引//solr.deleteByQuery("*:*");//提交修改server.commit();server.close();}/*** 查询* @throws Exception*/public void querySolr() throws Exception{HttpSolrClient solrServer = new HttpSolrClient.Builder(SOLR_URL ).build();SolrQuery query = new SolrQuery("*:*");//下面设置solr查询参数
// query.set("q", "*:*");// 参数q 查询所有query.set("q", "product_desc:白菜");
// query.set("q","白菜");//相关查询,比如某条数据某个字段含有周、星、驰三个字 将会查询出来 ,这个作用适用于联想查询//参数fq, 给query增加过滤查询条件
// query.addFilterQuery("product_id:[100 TO 500]");//id为0-5
// query.addFilterQuery("product_price:[50 TO *]");//
// query.addFilterQuery("product_price:[* TO 90]");////给query增加布尔过滤条件
// query.addFilterQuery("product_desc:白菜"); ////参数df,给query设置默认搜索域
// query.set("df", "product_name");//参数sort,设置返回结果的排序规则
// query.setSort("product_id",SolrQuery.ORDER.desc);//设置分页参数
// query.setStart(1);
// query.setRows(1);//每一页多少值//参数hl,设置高亮
// query.setHighlight(true);
// //设置高亮的字段
// query.addHighlightField("product_name");
// //设置高亮的样式
// query.setHighlightSimplePre("<font color='red'>");
// query.setHighlightSimplePost("</font>");//获取查询结果QueryResponse response = solrServer.query(query);//两种结果获取:得到文档集合或者实体对象//查询得到文档的集合
// SolrDocumentList solrDocumentList = response.getResults();
// System.out.println("通过文档集合获取查询的结果");
// System.out.println("查询结果的总数量:" + solrDocumentList.getNumFound());
// //遍历列表
// for (SolrDocument doc : solrDocumentList) {
// System.out.println("id:"+doc.get("product_id")+" name:"+doc.get("product_name")+" description:"+doc.get("product_desc"));
// }//得到实体对象List<Product> tmpLists = response.getBeans(Product.class);if(tmpLists!=null && tmpLists.size()>0){System.out.println("通过文档集合获取查询的结果");for(Product per:tmpLists){System.out.println("id:"+per.getProduct_id()+" name:"+per.getProduct_name()+" price:"+per.getProduct_price()+" description:"+ per.getProduct_desc());}}}public static void main(String[] args) throws Exception {SolrTest solr = new SolrTest();solr.createSolrServer();
// solr.addDoc();
// solr.addDoc(new Product(1001, "大白菜",
// 48.8, "我是一颗大白菜,再长也长不大"));solr.deleteDocumentById();
// solr.querySolr();}
}
solr基本操作步骤相关推荐
- springboot数据访问基本操作步骤
springboot数据访问基本操作步骤 步骤一:创建一个springboot项目 配置pom.xml依赖(此阶段我没有配置web场景启动器) <?xml version="1.0&q ...
- blob数据类型_MySQL 8.0 基本操作步骤:3.字段和数据类型的选择
上一篇: MySQL 8.0 基本操作步骤:1.创建数据库数据表show/use/create/desc MySQL 8.0 基本操作步骤:2.数据记录的查增删改select/insert/delet ...
- cam350 不能打开光绘文件_CAM350基本操作步骤
CAM350基本操作步骤 CAM基本操作步骤用法 每一个PCB板基本上都是由孔径孔位层.DRILL层.线路层.阻焊层.字符层所组成的,在CAM350中,每载入一层都会以不同的颜色区分开,以便于我们操作 ...
- Solr安装步骤 + dataimport导入数据配置
一:安装solr服务器 1.导入安装包到 /usr/local/solr/singleSolr目录下 解压tomat命令:tar -zxvf apache-tomcat-7.0.47.tar.gz 解 ...
- python不可以操作access数据库_Python操作Access数据库基本操作步骤分析
Python编程语言的出现,带给开发人员非常大的好处.我们可以利用这样一款功能强大的面向对象开源语言来轻松的实现许多特定功能需求.比如Python操作Access数据库的功能实现等等.在Python操 ...
- 本地BLAST的使用方法及基本操作步骤
文章目录 BLAST+程序下载与安装 基因组数据下载 制作数据库 BLAST 叮! BLAST+程序下载与安装 BLAST+安装包下载地址:ftp://ftp.ncbi.nlm.nih.gov/bla ...
- gitLab团队开发基本操作步骤
目录 一.问题 二.gitLab简介 三.gitLab基本使用步骤 1.团队在gitLab上创建了一个项目 testProject,作为开发人员,首先需要将testProject项目下载到本地. 2. ...
- python邮件合并的基本操作步骤_Python如何实现反向邮件合并功能
摘要:邮件合并是Office的一项功能,可便捷地批量生成文档,却无法从大量Word文档中汇总信息.结合实际应用,阐述基于Python语言对Word文档进行批量导入.读取其中的表格与段落.汇总信息至Ex ...
- python 邮件合并的基本操作步骤_邮件合并的五大步骤
展开全部 进行邮件合并的简单步骤如下: 1.切换到"邮件"菜单下,点击"选择收件人",62616964757a686964616fe78988e69d83313 ...
最新文章
- KernelIoControl和OEMIoControl的分析和使用(作者:wogoyixikexie@gliet)
- AVFoundation和 GPUImage初探
- SecurityUtil
- 牛客题霸 [合并二叉树] C++题解/答案
- 【Python】字符串反转
- 瞬时极性法对正负反馈的判断方法_何为反馈?如何判断?统统告诉你
- 1 阿里云Nginx配置https实现域名访问项目
- 无意中发现的MSDN软件下载网站
- IDEA官网以往版本下载
- reviewboard 介绍
- POJ 6184 【三元环 +分治】
- 星星之火-6:无线通信必须知道的“信号”与傅里叶信号变换
- 德州大学奥斯汀分校计算机科学排名,德州大学奥斯汀分校专业排名一览及最强专业推荐(QS世界大学排名)...
- My Neighbor Alice新一轮土地销售分析
- (python)爬虫----八个项目带你进入爬虫的世界
- 声纹识别概述(3)声纹识别系统
- python绘制动态k线及均线_Python绘制股票移动均线的实例
- WIFi 开关控制实现-ESP8266 物联网 android studio arduino QT多线程服务器
- php 化学泥浆,天水化学泥浆
- xp开机加载个人设置很慢的解决方法