Solr——Java应用
2024-09-05 04:39:42
Solr有一个客户端SolrJ
创建一个Java Project
引入Jar包
添加test类
package com.solr.test; import java.io.IOException;
import java.util.List; 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 com.solr.entity.Person; public class SolrJTest {
//指定solr服务器的地址
private final static String SOLR_URL = "http://localhost:8080/solr/"; /**
* 创建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(SOLR_URL);
return solr;
} /**
* 往索引库添加文档
* @throws IOException
* @throws SolrServerException
*/
public void addDoc() throws SolrServerException, IOException{
//构造一篇文档
SolrInputDocument document = new SolrInputDocument();
//往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义
document.addField("id", "8");
document.addField("name", "周新星");
document.addField("description", "一个灰常牛逼的军事家");
//获得一个solr服务端的请求,去提交 ,选择具体的某一个solr core
HttpSolrClient solr = new HttpSolrClient(SOLR_URL + "my_core");
solr.add(document);
solr.commit();
solr.close();
} /**
* 根据id从索引库删除文档
*/
public void deleteDocumentById() throws Exception {
//选择具体的某一个solr core
HttpSolrClient server = new HttpSolrClient(SOLR_URL+"my_core");
//删除文档
server.deleteById("8");
//删除所有的索引
//solr.deleteByQuery("*:*");
//提交修改
server.commit();
server.close();
} /**
* 查询
* @throws Exception
*/
public void querySolr() throws Exception{
HttpSolrClient solrServer = new HttpSolrClient(SOLR_URL+"my_core/");
SolrQuery query = new SolrQuery();
//下面设置solr查询参数
//query.set("q", "*:*");// 参数q 查询所有
query.set("q","周星驰");//相关查询,比如某条数据某个字段含有周、星、驰三个字 将会查询出来 ,这个作用适用于联想查询 //参数fq, 给query增加过滤查询条件
query.addFilterQuery("id:[0 TO 4]");//id为0-4 //给query增加布尔过滤条件
//query.addFilterQuery("description:演员"); //description字段中含有“演员”两字的数据 //参数df,给query设置默认搜索域
query.set("df", "name"); //参数sort,设置返回结果的排序规则
query.setSort("id",SolrQuery.ORDER.desc); //设置分页参数
query.setStart(0);
query.setRows(10);//每一页多少值 //参数hl,设置高亮
query.setHighlight(true);
//设置高亮的字段
query.addHighlightField("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("id")+" name:"+doc.get("name")+" description:"+doc.get("description"));
} //得到实体对象
List<Person> tmpLists = response.getBeans(Person.class);
if(tmpLists!=null && tmpLists.size()>0){
System.out.println("通过文档集合获取查询的结果");
for(Person per:tmpLists){
System.out.println("id:"+per.getId()+" name:"+per.getName()+" description:"+per.getDescription());
}
}
} public static void main(String[] args) throws Exception {
SolrJTest solr = new SolrJTest();
//solr.createSolrServer();
solr.addDoc();
//solr.deleteDocumentById();
//solr.querySolr();
}
}
查询结果:
通过文档集合获取查询的结果
查询结果的总数量:3
id:3 name:周节能 description:台湾著名歌手,号称音乐天王
id:2 name:周润发 description:香港著名演员
id:1 name:周星驰 description:香港著名喜剧演员
最新文章
- hive查看建表语句
- hdu1162Eddy&#39;s picture
- 软件测试 -- Bug等级划分规范
- keil优化论
- servlet获得完整路径
- JavaScript 全局变量命名空间生成函数
- Zend Studio错误总结
- ip xfrm命令是做什么的?
- 关于在Python3.6下安装MySQL-python,flask-sqlalchemy模块的问题
- codeM美团编程大赛初赛B轮D题(考验你的数学思维!)
- Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4
- 第九节 JS运动应用
- c#中富文本编辑器Simditor带图片上传的全部过程(项目不是mvc架构)
- QString 与 string转换
- asyncio 中给running 的loop 动态添加 Future Task
- vim 使用和配置
- ASP.NET Web API 全局权限和异常处理
- Java调用Bat
- Terminal shortcuts
- TYVJ-P1864 守卫者的挑战 题解
热门文章
- 【Web网站服务器开发】Apache 和 Tomcat的区别及配置
- Linux下kafka集群搭建过程记录
- speedtest-cli 命令
- Ubuntu 下几种软件安装的方法小结
- ARST 第五周打卡
- 解决tomcat端口冲突
- centos 配置mysql主从复制
- 409 Conflict - PUT https://registry.npm.taobao.org/-/user/org.couchdb.user:zphtown - [conflict] User xxx already exists
- git clone ssh 时出现 fatal: Could not read from remote repository
- app hellocharts 柱状图