Java操作Solr之SolrJ
添加SolrJ的jar包
solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
创建索引
使用SolrJ创建索引,通过调用SolrJ提供的API请求Solr服务,Document通过SolrInputDocument进行构建。
// 创建索引
public static void createIndex() throws Exception {
SolrServer solrServer = new HttpSolrServer("http://192.168.50.50:8080/solr/collection1");
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "00001");
document.addField("name", "solr全文检索");
document.addField("price", 86.5f);
document.addField("description", "这是一本关于solr的书籍!");
UpdateResponse response = solrServer.add(document);
solrServer.commit();
}
删除索引
//删除索引
public void deleteIndex() throws Exception {
SolrServer solrServer = new HttpSolrServer(solrUrl);
//根据id删除
UpdateResponse response = solrServer.deleteById("c0001");
//根据多个id删除
solrServer.deleteById("0001,0002");
//自动查询条件删除
solrServer.deleteByQuery("name:教程");
solrServer.commit();
}
搜索索引
//查询索引
public static void selectIndex() throws Exception {
SolrServer solr = new HttpSolrServer(solrUrl);
// 查询对象
SolrQuery query = new SolrQuery();
//设置查询条件,名称“q”是固定的且必须的
//搜索keywords域,keywords是复制域包括name和description
query.set("q", "keywords:java教程");
// 设置商品分类、关键字查询
query.setQuery("name:数据 AND price:11.1");
// 设置价格范围
query.set("fq", "price:[1 TO 20]");
// 查询结果按照价格降序排序
//query.set("sort", "price desc");
query.addSort("price", ORDER.desc);
// 请求查询
QueryResponse response = solr.query(query);
// 查询结果
SolrDocumentList docs = response.getResults();
// 查询文档总数
System.out.println("查询文档总数" + docs.getNumFound());
for (SolrDocument doc : docs) {
String id = (String) doc.getFieldValue("id");
String name = (String)doc.getFieldValue("name");
Float price = (Float)doc.getFieldValue("price");
String description = (String)doc.getFieldValue("description");
System.out.println(id);
}
}
高亮搜索索引
// 分页和高亮
public static void selectHeightLight() throws Exception {
SolrServer solr = new HttpSolrServer(solrUrl);
// 查询对象
SolrQuery query = new SolrQuery();
// text是name、title等众多字段的复制域
query.setQuery("text:算");
// 每页显示记录数
int pageSize = 2;
// 当前页码
int curPage = 1;
// 开始记录下标
int begin = pageSize * (curPage - 1);
// 起始下标
query.setStart(begin);
// 结束下标
query.setRows(pageSize);
// 设置高亮参数
query.setHighlight(true); // 开启高亮组件
query.addHighlightField("name");// 高亮字段
query.setHighlightSimplePre("<span color='red'>");//前缀标记
query.setHighlightSimplePost("</span>");// 后缀标记
// 请求查询
QueryResponse response = solr.query(query);
// 查询结果
SolrDocumentList docs = response.getResults();
// 查询文档总数
System.out.println("查询文档总数" + docs.getNumFound());
for (SolrDocument doc : docs) {
// 商品主键
String id = (String) doc.getFieldValue("id");
// 商品名称
String name = (String)doc.getFieldValue("name");
// 高亮信息
if(response.getHighlighting() != null) {
if(response.getHighlighting().get(id) != null) {
// 取出高亮片段
Map<String, List<String>> map = response.getHighlighting().get(id);
if(map.get("name") != null) {
for(String s : map.get("name")) {
System.out.println(s);
}
}
}
}
}
}
Java操作Solr之SolrJ的更多相关文章
- java操作solr
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</a ...
- java操作solr实现查询功能
一.封装的查询方法 /** * solr查询方法 * @param client solr客户端 * @param query solr查询对象 * @return list集合 * @throws ...
- Solr 14 - SolrJ操作SolrCloud集群 (Solr的Java API)
目录 1 pom.xml文件的配置 2 SolrJ操作SolrCloud 1 pom.xml文件的配置 项目的pom.xml依赖信息请参照: Solr 09 - SolrJ操作Solr单机服务 (So ...
- Solr 09 - SolrJ操作Solr单机服务 (Solr的Java API)
目录 1 SolrJ是什么 2 SolrJ对索引的CRUD操作 2.1 创建Maven工程(打包方式选择为jar) 2.2 配置pom.xml文件, 加入SolrJ的依赖 2.3 添加和修改索引 2. ...
- 使用solrj操作solr索引库
(solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有 ...
- 使用solrj操作solr索引库,solr是lucene服务器
客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...
- 利用SolrJ操作solr API完成index操作
使用SolrJ操作Solr会比利用httpClient来操作Solr要简单.SolrJ是封装了httpClient方法,来操作solr的API的.SolrJ底层还是通过使用httpClient中的方法 ...
- 使用solrJ操作solr常用方法 【注释非常详细,非常好】
转: 使用solrJ操作solr常用方法 2017年08月07日 22:49:06 成都往右 阅读数:8990 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- solr的客户端操作:使用solrj进行curd操作
导入相关的jar包 <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-s ...
随机推荐
- [Java in NetBeans] Lesson 17. File Input/Output.
这个课程的参考视频和图片来自youtube. 主要学到的知识点有: We want to handle the bad Error. (e.g bad input / bugs in program) ...
- linux统计文件夹大小
统计总大小: du -sh dirname 统计文件夹内部各文件大小及总大小: du -h dirname
- SwingBench 字符模式压测最佳实践
之前写过<使用SwingBench 对Oracle RAC DB性能 压力测试>,使用的是最基础直观的图形模式,已经可以满足大多数需求. 但是在有些场景下,图形模式可能本身消耗资源过大,尤 ...
- keepalived+双主架构
简介 keepalived是基于VRRP协议的,全称 Virtual Redundent Routing Protocal 虚拟路由协议,为解决静态路由单点故障引起的网络失效问题设计的一套主备协议 两 ...
- 总结docker常用命令
docker 1docker pull 镜像 2docker ps -a 查看所有容器docker image 查看镜像 3docker rm 容器id 删除容器 docker rm 一次可以指定多个 ...
- Mysql导出(多张表)表结构及表数据 mysqldump用法
命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 數據库名 表名 脚本名; 1.导出數據库為dbname的表结构(其中用戶名為root,密码為dbpasswd,生成的脚 ...
- Sql server 存储过程批量插入若干数据。
测试时,经常需要生成大量数据来测试系统性能,此功能可以用存储过程快速生成. 1. 随机生成日期 DECLARE @Date_start datetime DECLARE @Date_end datet ...
- RabbitMQ生产者消费者
package com.ra.car.rabbitMQ; import java.io.IOException; import java.util.HashMap; import java.util. ...
- python 将字节字符串转换成十六进制字符串
想将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成一个十六进制字符串 1)只是简单的解码或编码一个十六进制的原始字符串,可以使用 binascii模块 >>> s ...
- 【转】基于 Kylin 的推荐系统效果评价系统
OLAP(联机分析处理)是数据仓库的主要应用之一,通过设计维度.度量,我们可以构建星型模型或雪花模型,生成数据多维立方体Cube,基于Cube可以做钻取.切片.旋转等多维分析操作.早在十年前,SQL ...