Solr总结

一、solr的介绍

  • 什么是solr

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。

Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化

使用Solr 进行创建索引和搜索索引的实现方法很简单,如下:

  • 创建索引:客户端(可以是浏览器可以是Java程序)用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr服务器根据xml文档添加、删除、更新索引 。
  • 搜索索引:客户端(可以是浏览器可以是Java程序)用 GET方法向 Solr 服务器发送请求,然后对 Solr服务器返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建页面UI的功能,但是Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况

 

  • Solr和Lucene的区别

Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索应用。Lucene仅提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索应用。

 Solr的目标是打造一款企业级的搜索引擎系统,它是基于Lucene一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。

                                  

bin:solr的运行脚本

contrib:solr的一些扩展jar包,用于增强solr的功能。

dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。

docs:solr的API文档

example:solr工程的例子目录:

  •  example/solr

            该目录是一个标准的SolrHome,它包含一个默认的SolrCore

  • example/multicore

             该目录包含了在Solr的multicore中设置的多个Core目录。

  • example/webapps

              该目录中包括一个solr.war,该war可作为solr的运行实例工程。

licenses:solr相关的一些许可信息

 

solr的安装:https://blog.csdn.net/Gray_humor/article/details/86691259

solr安装中文分词器:https://blog.csdn.net/Gray_humor/article/details/86745541

solr安装dataimport:https://blog.csdn.net/Gray_humor/article/details/86745649

二、Solrj的使用

  • 什么是solrj

Solrj就是solr服务器的java客户端。

 

三、入门程序

tomcat8、jdk8、solr6.4.1

导jar包

添加、修改、删除索引

public class IndexSolr {

	private HttpSolrClient server = null;
	private String url = "http://localhost:8080/solr/new_core";// 其中db为自定义的core名称

	@Test
	public void insertAndUpdate() throws Exception {
		// 创建HttpSolrServer
		server = new HttpSolrClient.Builder(url).build();
		// 创建Document对象
		SolrInputDocument doc = new SolrInputDocument();
		doc.addField("id", "c001");
		doc.addField("product_name", "solr222");
		// 将Document对象添加到索引库
		server.add(doc);
		// 提交
		server.commit();
	}

	@Test
	public void deleteIndex() throws Exception {
		server = new HttpSolrClient.Builder(url).build();
		// server.deleteById("c001");
		server.deleteByQuery("id:c001");
		server.commit();

	}
	
}

基本搜索

	@Test
	public void searcher01() throws Exception {

		// 创建HttpSolrServer
		server = new HttpSolrClient.Builder(url).build();

		// 创建Query对象
		SolrQuery query = new SolrQuery();
		// 输入查询条件
		query.setQuery("product_name:小黄人");
		// 执行查询并返回结果集
		QueryResponse response = server.query(query);
		SolrDocumentList list = response.getResults();
		// 匹配结果总数
		long numFound = list.getNumFound();
		System.out.println("匹配总数为" + numFound);

		for (SolrDocument solrDocument : list) {
			System.out.println(solrDocument.get("id"));
			System.out.println(solrDocument.get("product_catalog_name"));
			System.out.println(solrDocument.get("product_price"));
			System.out.println(solrDocument.get("product_name"));
			System.out.println(solrDocument.get("product_picture"));
			System.out.println("==========================");
		}

复杂搜索

@Test
	public void searcher02() throws Exception {
		// 创建HttpSolrServer
		server = new HttpSolrClient.Builder(url).build();

		// 创建Query对象
		SolrQuery query = new SolrQuery();
		// 输入查询条件
		query.setQuery("product_name:小黄人");
		// 设置过滤条件
		query.addField("product_price:[1 TO 100]");
		// 设置分类排序
		query.setSort("product_price", ORDER.desc);
		// 设置显示分页信息
		query.setStart(0);
		query.setRows(10);
		// 设置显示的Filed域
		query.setFields("id,product_name,product_price,product_catalog");
		// 设置默认域
		query.set("df", "product_name");
		// 设置高亮信息
		query.setHighlight(true);
		query.addHighlightField("product_name");
		query.setHighlightSimplePre("<em>");
		query.setHighlightSimplePost("</em>");

		// 执行查询并返回结果集
		QueryResponse response = server.query(query);
		SolrDocumentList list = response.getResults();
		// 匹配结果总数
		long numFound = list.getNumFound();
		System.out.println("匹配总数为" + numFound);

		// 获取高亮显示信息
		Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();

		for (SolrDocument solrDocument : list) {
			System.out.println(solrDocument.get("id"));

			List<String> list2 = highlighting.get(solrDocument.get("id")).get("product_name");
			if (list2 != null) {
				System.out.println("高亮信息" + list2.get(0));
			}

			System.out.println(solrDocument.get("product_catalog"));
			System.out.println(solrDocument.get("product_price"));
			System.out.println(solrDocument.get("product_name"));
			System.out.println("==========================");
		}
	}

猜你喜欢

转载自blog.csdn.net/Gray_humor/article/details/86744920
今日推荐