Solr的基本使用
来源:互联网 发布:comic studio mac版 编辑:程序博客网 时间:2024/06/07 02:44
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果,是基于Lucene的全文搜索服务器。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 使用Solr 进行创建索引和搜索索引的实现方法很简单,如下:
创建索引:客户端(可以是浏览器可以是Java程序)用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr服务器根据xml文档添加、删除、更新索引 。
搜索索引:客户端(可以是浏览器可以是Java程序)用 GET方法向 Solr 服务器发送请求,然后对 Solr服务器返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建页面UI的功能,但是Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
以下为基本操作代码:
Solt
package com.yi.solr;import com.yi.vo.SolrItem;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.impl.HttpSolrServer;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 org.junit.Before;import org.junit.Test;import java.util.List;import java.util.Map;/** * 使用solr进行增删查改 * Created by Administrator on 2017/4/25. */public class SolrTest { private HttpSolrServer httpSolrServer; @Before public void init(){ httpSolrServer = new HttpSolrServer("http://localhost:8080/solr"); } /** * 添加方式一:SolrInputDocument * @throws Exception */ @Test public void testAddDocument() throws Exception{ //创建SolrInputDocument对象,用于添加域 SolrInputDocument solrInputFields = new SolrInputDocument(); /** * 参数一:域名称必须是在schema.xml中定义 * 参数二:域的值 * 因为在schema.xml中配置了<uniqueKey>id</uniqueKey>,所以id不能少 */ solrInputFields.addField("id",101L); solrInputFields.addField("title","添加方式一:SolrInputDocument"); solrInputFields.addField("price",2000L); solrInputFields.addField("sellPoint","Java代码编写"); solrInputFields.addField("image","http://localhost/solr/aaa.jpg"); solrInputFields.addField("status",1); //将文档添加到索引库索引化 httpSolrServer.add(solrInputFields); //提交 httpSolrServer.commit(); System.out.println("添加成功"); } /** * 添加方式二:Bean * @throws Exception */ @Test public void testBean() throws Exception{ //创建提交的对象 SolrItem solrItem = new SolrItem(); solrItem.setId(102L); solrItem.setTitle("添加方式二:Bean"); solrItem.setImage("http://localhost/solr/aaa.jpg"); solrItem.setPrice(2000L); solrItem.setSellPoint("使用Javabean添加文档"); solrItem.setStatus(1); //状态 //将文档添加到索引库索引化 httpSolrServer.addBean(solrItem); //提交 httpSolrServer.commit(); System.out.println("添加成功"); } /** * 根据id删除索引文档 * @throws Exception */ @Test public void testDeleteById() throws Exception{ //指定删除文档id域对应的值 httpSolrServer.deleteById("101"); //提交 httpSolrServer.commit(); System.out.println("删除成功"); } /** * 根据条件删除索引文档 * @throws Exception */ @Test public void testDeleteByQuery() throws Exception{ //根据条件删除索引文档(直接使用中文词组因为配置了IK分词器) httpSolrServer.deleteByQuery("title:方式"); //删除所有文档 //httpSolrServer.deleteByQuery("*:*"); //提交 httpSolrServer.commit(); System.out.println("删除成功"); } /** * 查询方式一:使用Javabean获取结果列表 * @throws Exception */ @Test public void testSearchBean() throws Exception{ //创建查询对象 SolrQuery solrQuery = new SolrQuery(); //搜索标题包含手机,并且状态为1的文档 solrQuery.setQuery("title:手机 AND status:1"); //设置过滤条件,返回的数据在300000 ~ 800000 (不包含800000) solrQuery.setFilterQueries("price:[300000 TO 800000}"); //设置排序,根据价格降序排序 solrQuery.setSort("price", SolrQuery.ORDER.desc); //设置分页 solrQuery.setStart(0); //起始索引 solrQuery.setRows(10); //页面大小 //设置高亮 solrQuery.setHighlight(true); solrQuery.addHighlightField("title"); //设置需要高亮的域 solrQuery.setHighlightSimplePre("<em>"); //设置前缀高亮标签 solrQuery.setHighlightSimplePost("</em>"); //设置后缀高亮标签 //查询 QueryResponse response = httpSolrServer.query(solrQuery); //获取总记录数 long total = response.getResults().getNumFound(); System.out.println("查询的总记录数为:" + total); //获取结果列表 List<SolrItem> list = response.getBeans(SolrItem.class); //打印搜索的文档数据 if(list != null && list.size() > 0){ //获取高亮标签数据 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); //遍历所有数据 for (SolrItem solrItem:list ) { System.out.println("--------------------------------------------"); System.out.println("id:" + solrItem.getId()); System.out.println("原标题title:" + solrItem.getTitle()); System.out.println("高亮标题title:" + highlighting.get(solrItem.getId().toString()).get("title").get(0)); System.out.println("price:" + solrItem.getPrice()); System.out.println("image:" + solrItem.getImage()); System.out.println("sellPoint:" + solrItem.getSellPoint()); //因为在schema.xml时没有设置该域为存储,所以为null,但设置了要索引,所以可以进行搜索 System.out.println("status:" + solrItem.getStatus()); } } } /** * 查询方式二:使用SolrDocumentList接收结果列表 * @throws Exception */ @Test public void testSearchDocument() throws Exception{ //创建查询对象 SolrQuery solrQuery = new SolrQuery(); //搜索标题包含手机,并且状态为1的文档 solrQuery.setQuery("title:手机 AND status:1"); //设置过滤条件,返回的数据在300000 ~ 800000 (不包含800000) solrQuery.setFilterQueries("price:[300000 TO 800000}"); //设置排序,根据价格降序排序 solrQuery.setSort("price", SolrQuery.ORDER.desc); //设置分页 solrQuery.setStart(0); //起始索引 solrQuery.setRows(10); //页面大小 //设置高亮 solrQuery.setHighlight(true); solrQuery.addHighlightField("title"); //设置需要高亮的域 solrQuery.setHighlightSimplePre("<em>"); //设置前缀高亮标签 solrQuery.setHighlightSimplePost("</em>"); //设置后缀高亮标签 //查询 QueryResponse response = httpSolrServer.query(solrQuery); //获取总记录数 long total = response.getResults().getNumFound(); System.out.println("查询的总记录数为:" + total); //获取结果列表 SolrDocumentList results = response.getResults(); //打印搜索的文档数据 if(results != null && results.size() > 0){ //获取高亮标签数据 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); //遍历所有数据 for (SolrDocument solrDocument:results ) { System.out.println("--------------------------------------------"); System.out.println("id:" + solrDocument.get("id")); System.out.println("原标题title:" + solrDocument.get("title")); System.out.println("高亮标题title:" + highlighting.get(solrDocument.get("id").toString()).get("title").get(0)); System.out.println("price:" + solrDocument.get("price")); System.out.println("image:" + solrDocument.get("image")); System.out.println("sellPoint:" + solrDocument.get("sellPoint")); //因为在schema.xml时没有设置该域为存储,所以为null,但设置了要索引,所以可以进行搜索 System.out.println("status:" + solrDocument.get("status")); } } }}
package com.yi.vo;import java.io.Serializable;import org.apache.solr.client.solrj.beans.Field;public class SolrItem implements Serializable { //在solrCore中的schema.xml文件中定义的域名称@Field("id") private Long id;@Field("title") private String title;@Field("sellPoint") private String sellPoint;@Field("price") private Long price; @Field("image") private String image; @Field("status") private Integer status; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSellPoint() { return sellPoint; } public void setSellPoint(String sellPoint) { this.sellPoint = sellPoint; } public Long getPrice() { return price; } public void setPrice(Long price) { this.price = price; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String[] getImages() { if(image != null && !"".equals(image)){ return image.split(","); } return null; }@Overridepublic String toString() {return "SolrItem [id=" + id + ", title=" + title + ", sellPoint=" + sellPoint + ", price=" + price + ", image="+ image + ", status=" + status + "]";} }
查询打印结果:
0 0
- solr的基本使用
- Solr的基本使用
- solr的基本使用
- Solr的基本使用
- Solr的基本使用
- Solr的基本使用
- 基本的solr概念
- solr的增删改查加分页的基本使用
- solr环境搭建&基本使用
- 使用 Apache Solr 实现更加灵巧的搜索,第 1 部分: 基本特性和 Solr 模式
- 使用 Apache Solr 实现更加灵巧的搜索,第 1 部分: 基本特性和 Solr 模式
- 使用 Apache Solr 实现更加灵巧的搜索,第 1 部分: 基本特性和 Solr 模式
- 使用 Apache Solr 实现更加灵巧的搜索,第 1 部分: 基本特性和 Solr 模式
- 3、solr的基本操作
- 搜索学习--Solr全文搜索服务器的基本使用(二)——Spring Data Solr的使用
- 使用SolrJ来操作Solr的一些基本的知识(初识Solr,写的不对请指正)
- solr 的使用
- Solr solrj的使用
- hive连数据库配置
- Java多线程学习总结
- Linux中supervisor的配置与使用
- js中为element扩展insertAfter()方法
- 让IE9以下版本支持HTML5
- Solr的基本使用
- java selenium (一) selenium 介绍
- redis集群搭建
- CSS易错点--float、透明度、rem...
- okhttp实现websocket长连接
- ContentProvider之MIME类型与getType()
- Java接口与抽象类区别
- 【网络协议】互联网协议入门
- 从零开始学Makefile(三)