详解java整合solr5.0之solrj的使用
作者:古越剑箫 发布时间:2023-07-23 03:12:06
标签:java,solr
1、首先导入solrj需要的的架包
2、需要注意的是低版本是solr是使用SolrServer进行URL实例的,5.0之后已经使用SolrClient替代这个类了,在添加之后首先我们需要根据schema.xml配置一下我们的分词器
这里的msg_all还需要在schema.xml中配置
它的主要作用是将msg_title,msg_content两个域的值拷贝到msg_all域中,我们在搜索的时候可以只搜索这个msg_all域就可以了,
solr默认搜索需要带上域,比如
solr更改默认搜索域的地方也在schema.xml,它默认是搜索text域的,但是5.0之后不在这里配置默认搜索域了,它的文档也告诉我们,在solrconfig.xml中配置
在solrconfig.xml中配置默认搜素域,这样我们就可以按照我们自己的域进行搜索了
配置好以上,就可以使用代码进行CURD
private final static String URL="http://localhost:8080/solr/java";
public SolrClient server=null;
@Before
public void init() throws Exception{
server=new HttpSolrClient(URL);
}
删除所有分词
//删除所有分词
@Test
public void testDel() throws Exception{
server.deleteByQuery("*:*");
server.commit();//先删除 基于query的删除 会删除所有建立的索引文件
}
增加分词
@Test
public void testAdd() throws Exception{
SolrInputDocument doc=new SolrInputDocument();
doc.addField("id", "3");
doc.addField("msg_title", "新浪微博");
doc.addField("msg_content", "我有一个微博帐号名字叫做什么呢?");
server.add(doc);
server.commit();
}
基于Bean增加分词
@Test
public void test03() throws Exception{
List<Message> msgs=new ArrayList<Message>();
msgs.add(new Message("4", "第四个测试solr测试文件", new String[]{"中华人民共和国万岁","中华上下五千年那年"}));
msgs.add(new Message("5", "第5个好朋友是什么意思呢?", new String[]{"上海是个好地方","歌唱我们亲爱的祖国曾经走过千山万水"}));
server.addBeans(msgs);
server.commit();
}
查询结果
@Test
public void test04() throws Exception{
//定义查询内容 * 代表查询所有 这个是基于结果集
SolrQuery query = new SolrQuery("solr");
query.setStart(0);//起始页
query.setRows(3);//每页显示数量
QueryResponse rsp = server.query( query );
SolrDocumentList results = rsp.getResults();
System.out.println(results.getNumFound());//查询总条数
for(SolrDocument doc:results){
System.out.println(doc);
}
}
将查询结果集封装为对象Bean
@Test
public void test05() throws Exception{
SolrQuery query = new SolrQuery("中华");// * 号 是查询 所有的数据
QueryResponse rsp = server.query( query );
List<Message> beans = rsp.getBeans(Message.class);//这个不能获取查询的总数了 也不能高亮
for(Message message:beans){
System.out.println(message.toString());
}
}
将结果集高亮显示
@Test
public void test06() throws Exception{
//定义查询内容 * 代表查询所有 这个是基于结果集
SolrQuery query = new SolrQuery("solr");
query.setStart(0);//起始页
query.setRows(5);//每页显示数量
query.setParam("hl.fl", "msg_title,msg_content");//设置哪些字段域会高亮显示
query.setHighlight(true).setHighlightSimplePre("<span class='hight'>")
.setHighlightSimplePost("</span>");
QueryResponse rsp = server.query( query );
SolrDocumentList results = rsp.getResults();
System.out.println(results.getNumFound());//查询总条数
for(SolrDocument doc:results){
String id = (String) doc.getFieldValue("id"); //id is the uniqueKey field
if(rsp.getHighlighting().get(id)!=null){
//高亮必须要求存储 不存储的话 没法添加高亮
System.out.println(rsp.getHighlighting().get(id).get("msg_title"));
}
}
}
ok,solr的基本使用就完成了
来源:http://www.cnblogs.com/gyjx2016/p/5925163.html
0
投稿
猜你喜欢
- 开发环境win10Android Studio效果用于多级菜单展示,或选择。如 每个省,市,县;如 树木的病虫害;关键代码 @overrid
- 可以静态绑定数据源,这样就自动为DataGridView控件添加 相应的行。假如需要动态为DataGridView控件添加新行,方法有很多种
- 逆时针画圆弧,原理:将360度分割成36份,分别标出每10度角度时的坐标点,然后将每个点连接起来。 #include <io
- 前言在电商的应用中,最常见的就是在首页或完成某事件之后,弹出一堆的活动/广告。假如重叠弹出,很丑,给用户的体验也不好,所以一般都会依次依条件
- 引语:工作中有时候需要在普通的对象中去调用spring管理的对象,但是在普通的java对象直接使用@Autowired或者@Resource
- 一、 WillPopScope用法WillPopScope本质是一个widget用于拦截物理按键返回事件(Android的物理返回键和iOS
- 背景后台系统需要接入 企业微信登入,满足企业员工快速登入系统流程图简单代码说明自定义一套 springsecurity 认证逻辑主要就是 根
- 方式一:if语句控制// 例如:Column( mainAxisAlig
- jdk8之前 一、java.lang.Systemlong times = System.currentTimeMillis();
- 1.map遍历快速实现边距,文字自适应改变大小Container( // padding: EdgeI
- 简要:EigenFace是基于PCA降维的人脸识别算法,PCA是使整体数据降维后的方差最大,没有考虑降维后类间的变化。 它是将图像
- 一般而言,Android 应用在请求数据时都是以 Get 或 Post 等方式向远程服务器发起请求,那你有没有想过其实我们也可以在 Andr
- 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 一、静态库和动态库的区别1. 静态函数库这类库的
- iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下:#import <CoreLo
- 1、需要引入依赖<dependency> &l
- Android Studio 打包 jar 及 aar 包创建工程 New -> Module -> Library在gradl
- tcp客户端示例#include <errno.h> #include <sys/socket.h> #includ
- 什么是JMMJMM全称Java Memory Model, 中文翻译Java内存模型,一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问
- [LeetCode] 159. Longest Substring with At Most Two Distinct Characters
- C#串口模块的使用。使用VS .net框架下WinForm程序应用开发。C#开发的串口通信小工具。相比于QT添加的串口类,WinForm是通