Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。Solr能够独立运行在Jetty、Tomcat等这些Servlet容器中。都是Web服务器,Servlet容器,报文 ,JSON 格式字符串, XML格式字符串。Solr是一个能够独立运行的搜索服务器,使用solr进行全文检索服务的话,只须要经过http请求访问该服务器便可。java
使用Solr 进行建立索引和搜索索引的实现方法很简单,以下:node
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索应用。Lucene仅提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索应用。apache
Solr的目标是打造一款企业级的搜索引擎系统,它是基于Lucene一个搜索引擎服务,能够独立运行,经过Solr能够很是快速的构建企业的搜索引擎,经过Solr也能够高效的完成站内搜索功能。json
概念:HttpSolrServer浏览器
概念:SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你须要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不须要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时须要使用SolrCloud来知足这些需求。服务器
结构:SolrCloud为了下降单机的处理压力,须要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每一个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不一样的Shard的服务器中操做索引。SolrCloud须要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,因为SolrCloud须要由多台服务器组成,由zookeeper来进行协调管理。并发
package com.xyg.solrj; import java.util.List; import java.util.Map; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrQuery.ORDER; import org.apache.solr.client.solrj.SolrServer; 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.Test; /** * <p>Title:SolrjDemo</p> * @Description:solrj的入门程序 * @Param: * @Return: * @Author:Administrator * @Date:2017年11月3日上午12:32:42 */ public class SolrjDemo { //添加 修改 @Test public void testCreateAndUpdateIndex() throws Exception { // 1. 建立HttpSolrServer对象 // 设置solr服务接口,浏览器客户端地址http://127.0.0.1:8080/solr/#/ String baseURL = "http://127.0.0.1:8080/solr"; //String baseURL = "http://localhost:8080/solr/collection2"; SolrServer solrServer = new HttpSolrServer(baseURL); // 2. 建立SolrInputDocument对象 SolrInputDocument document = new SolrInputDocument(); document.addField("id", "100"); document.addField("name", "Hello world!"); // 3. 把SolrInputDocument对象添加到索引库中 solrServer.add(document); //httpSolrServer.add(document,1000); // 4. 提交 solrServer.commit(); } //删除 @Test public void testDeleteIndex() throws Exception { String baseURL = "http://127.0.0.1:8080/solr"; SolrServer solrServer = new HttpSolrServer(baseURL); // 根据id删除索引数据 //solrServer.deleteById("100"); // 根据条件删除(若是是*:*就表示所有删除,慎用) //solrServer.deleteByQuery("name:Hello"); solrServer.deleteByQuery("*:*"); //删除全部 solrServer.commit(); // 提交 } //查询 @Test public void testSearchIndex1() throws Exception { String baseURL = "http://127.0.0.1:8080/solr"; SolrServer solrServer = new HttpSolrServer(baseURL); // 建立搜索对象 SolrQuery query = new SolrQuery(); // 设置搜索条件 query.setQuery("*:*"); // 发起搜索请求 QueryResponse response = solrServer.query(query); // 处理搜索结果 SolrDocumentList docs = response.getResults(); System.out.println("搜索到的结果总数:" + docs.getNumFound()); // 遍历搜索结果 for (SolrDocument doc : docs) { System.out.println("----------------------------------------------------"); System.out.println("id:" + doc.get("id")); System.out.println("name:" + doc.get("name")); } } //复杂查询索引 @Test public void queryIndex2() throws Exception { //建立链接 SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //建立一个query对象 SolrQuery solrQuery = new SolrQuery(); //设置关键词查询条件 solrQuery.setQuery("钻石"); //solrQuery.set("q","钻石"); //过滤条件 solrQuery.setFilterQueries("product_catalog_name:幽默杂货"); //排序条件 solrQuery.setSort("product_price", ORDER.asc); //分页处理 solrQuery.setStart(0); solrQuery.setRows(10); //结果中域的列表 solrQuery.setFields("id","product_name","product_price","product_catalog_name","product_picture"); //设置默认搜索域 solrQuery.set("df", "product_keywords"); //高亮显示 solrQuery.setHighlight(true); //高亮显示的域 solrQuery.addHighlightField("product_name"); //高亮显示的前缀 solrQuery.setHighlightSimplePre("<font color='red'>"); //高亮显示的后缀 solrQuery.setHighlightSimplePost("</font>"); //执行查询 QueryResponse queryResponse = solrServer.query(solrQuery); //取查询结果 SolrDocumentList solrDocumentList = queryResponse.getResults(); //共查询到商品数量 System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound()); //遍历查询的结果 for (SolrDocument solrDocument : solrDocumentList) { System.out.println(solrDocument.get("id")); //取高亮显示 String productName = ""; Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting(); List<String> list = highlighting.get(solrDocument.get("id")).get("product_name"); //判断是否有高亮内容 if (null != list) { productName = list.get(0); } else { productName = (String) solrDocument.get("product_name"); } System.out.println(productName); System.out.println(solrDocument.get("product_price"));
System.out.println(solrDocument.get("product_catalog_name")); System.out.println(solrDocument.get("product_picture")); } } }