`

solr(二)——使用solrj实现基本的增、删、查功能

 
阅读更多

在上一篇blog中(http://guwq2014.iteye.com/blog/2289866),已经将solr服务端搭建完成了,这一篇将介绍solr客户端中使用solrj实现基本的增、删、查功能。

 

创建java工程TestSolr,导入基本的jar包:



 

 

新建一个测试类:SolrTest.java:

package com.solr;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrInputDocument;

/**
 * solrJ 使用 :增、删、查
 */
public class SolrJTest {

	public static final String SOLR_URL = "http://127.0.0.1:8080/solrweb";

	/**
	 * 添加
	 */
	public static void addDoc() {
		String[] words = { "中央全面深化改革领导小组", "第四次会议", "审议了国企薪酬制度改革", "考试招生制度改革",
				"传统媒体与新媒体融合等", "相关内容文件", "总理强调要", "逐步规范国有企业收入分配秩序",
				"实现薪酬水平适当", "结构合理、管理规范、监督有效", "对不合理的偏高", "过高收入进行调整",
				"深化考试招生制度改革", "总的目标是形成分类考试", "综合评价", "多元录取的考试招生模式", "健全促进公平",
				"科学选才", "监督有力的体制机制", "着力打造一批形态多样", "手段先进", "具有竞争力的新型主流媒体",
				"建成几家拥有强大实力和传播力", "公信力", "影响力的新型媒体集团" };
		long start = System.currentTimeMillis();
		Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
		for (int i = 1; i < 10; i++) {
			SolrInputDocument doc1 = new SolrInputDocument();
			doc1.addField("id", "id" + i, 1.0f);
			doc1.addField("name", words[i % 21], 1.0f);
			doc1.addField("price", 10 * i);
			docs.add(doc1);
		}

		try {
			HttpSolrServer server = new HttpSolrServer(SOLR_URL);
			UpdateResponse response = server.add(docs);
			server.optimize(); // 一定要执行一下
			System.out.println(response.getStatus());
		} catch (Exception e) {
			System.out.println(e);
		}
		System.out.println("time elapsed(ms):"
				+ (System.currentTimeMillis() - start));
	}

	/**
	 * 删除
	 */
	public static void delDoc() {
		long start = System.currentTimeMillis();
		try {
			HttpSolrServer server = new HttpSolrServer(SOLR_URL);
			List<String> ids = new ArrayList<String>();
			for (int i = 1; i < 10; i++) {
				ids.add("id" + i);
			}
			UpdateResponse response = server.deleteById(ids);
			server.commit();
			server.optimize(); // 一定要执行一下
			System.out.println(response.getStatus());
		} catch (Exception e) {
			System.out.println(e);
		}
		System.out.println("time elapsed(ms):"
				+ (System.currentTimeMillis() - start));
	}

	/**
	 * 查询
	 */
	public static void queryDoc() {
		HttpSolrServer server = new HttpSolrServer(SOLR_URL);
		server.setMaxRetries(1);
		server.setConnectionTimeout(5000);
		server.setParser(new XMLResponseParser());
		server.setSoTimeout(1000);
		server.setDefaultMaxConnectionsPerHost(100);
		server.setMaxTotalConnections(100);
		server.setFollowRedirects(false);
		server.setAllowCompression(true);

		// 使用SolrQuery传递参数,SolrQuery的封装性更好
		server.setRequestWriter(new BinaryRequestWriter());
		SolrQuery query = new SolrQuery();
		query.setQuery("video");
		query.setFields("id", "name", "price", "score");
		query.setSort("price", ORDER.asc);
		query.setStart(0);
		query.setRows(10);
		QueryResponse response = null;
		try {
			response = server.query(query);
		} catch (SolrServerException e) {
			e.printStackTrace();
		}
		// 搜索得到的结果数
		System.out.println("Find:" + response.getResults().getNumFound());
		// 输出结果
		int iRow = 1;
		for (SolrDocument doc : response.getResults()) {
			System.out.println("----------" + iRow + "------------");
			System.out.println("id: " + doc.getFieldValue("id").toString());
			System.out.println("name: " + doc.getFieldValue("name").toString());
			System.out.println("price: " + doc.getFieldValue("price").toString());
			System.out.println("score: " + doc.getFieldValue("score"));
			iRow++;
		}
	}

	/**
	 * main
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
//		addDoc();
//		delDoc();
		queryDoc();
	}

}

 即可实现增、删、查功能。

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

几个常见错误和解决方法:

报错信息:RemoteSolrException: Expected mime type application/octet-stream but got text/html

错误原因:solr服务端的地址错误

解决方法:在使用Tomcat部署Solr后,Collection1的地址为:http://127.0.0.1:8080/solr/#/collection1,但使用SolrJ进行索引的时候,应该使用http://127.0.0.1:8080/solr/collection1,即无中间的#号。

  • 大小: 8.7 KB
分享到:
评论

相关推荐

    solr-8.5.2.zip

    在本案例中,我们讨论的是 Solr 的一个特定版本——"solr-8.5.2.zip",这是一个已经配置好的版本,适用于快速部署和使用。这个压缩包包含了对 MySQL 数据库的集成配置,以及针对中文分词的支持,还配置了 Solr 的...

    Solr学习笔记(三)Solr客户端开发实例

    通过Solr客户端,我们可以与Solr服务器进行交互,实现数据的增删查改。 首先,我们需要了解Solr的基本概念。Solr服务器通常运行在一个独立的Java应用服务器上,如Tomcat。它包含几个核心组件,如索引、查询解析器、...

    apache solr1.3.0所有最新开发包及源码及文档

    ——SolrJ客户端和一个二元响应协议,支持更快的客户端-服务器通信 ——搜索组件可以被组成链式结构,用来提供更灵活的查询处理。组件包括现有的功能如faceting(多侧面搜索),同时添加More Like This(更多类似的...

    手把手教你 对 solr8 配置用户登录验证 涉及到的配置文件

    Solr 是一个流行的开源搜索引擎,提供了全文搜索、高级查询语法、多语言支持等功能。在 Solr 8 中,为了确保系统的安全性和数据的隐私性,配置用户登录验证是非常重要的步骤。本文将详细介绍如何对手动配置 Solr 8 ...

    lucene4 solr4j arIk4

    1. 异步操作支持:通过使用SolrJ,可以实现非阻塞的索引操作,提高系统的吞吐量。 2. 集群支持:SolrJ可以无缝地与Solr集群通信,实现分布式搜索和负载均衡。 3. JSON和XML支持:SolrJ能够处理Solr的多种响应格式,...

    lucene solr框架代码实例(可直接运行)

    这就引出了我们的第二个主角——Solr。Solr是基于Lucene构建的企业级搜索平台,它为Lucene提供了更高级的API和更易用的管理界面。Solr的核心特性包括: 1. **配置友好**:Solr通过XML配置文件定义索引字段和处理...

    solr cook book

    本书涵盖了超过100个实用的配方,旨在帮助读者发现与Apache的企业级搜索服务器——Solr——交互的新方法。Solr是一个高度可扩展、高性能的开源全文搜索平台,广泛应用于各种企业级应用中,提供快速、精准的搜索功能...

    Solr和ElasticSearch全文检索客户端代码

    综上所述,全文检索客户端代码是实现高效、便捷搜索的关键,无论是Solr还是Elasticsearch,都可以通过其提供的Java客户端工具实现数据的增删改查。在实际应用中,应根据项目需求和团队技能选择合适的全文检索引擎,...

    搜索引擎solr和elasticsearchJava开发J

    标题中的“搜索引擎solr和elasticsearchJava开发J”提到了两个关键的开源搜索技术——Apache Solr和Elasticsearch,以及它们与Java的结合使用。这两个都是基于Lucene库的全文检索引擎,广泛应用于大数据量的全文搜索...

    jackrabbit-webdav-2.7.1.zip

    "Sullerj examples"可能包含了示例代码,展示了如何使用Suller与Solr进行交互,而"具有更丰富的文档绑定"意味着Suller提供了更多的功能和文档支持,以便开发者能够更方便地集成Solr到他们的应用中。 标签"开源项目...

    亿万级搜索解决方案.docx

    #### 四、案例分享——《品优购》搜索功能实现 1. **系统架构**: - 基于Dubbo的服务框架,结合Solr集群实现高效搜索。 - 使用Nginx作为前端负载均衡器。 - Zookeeper集群用于管理服务发现与配置。 2. **搜索...

    搜索引擎-java

    Java可以用来实现这些功能,例如使用Jsoup库进行网页抓取,Apache Lucene进行索引和搜索,以及Solr或Elasticsearch进行分布式搜索服务。 二、Java在搜索引擎中的应用 1. 爬虫:Java中的Jsoup库允许开发者解析HTML...

Global site tag (gtag.js) - Google Analytics