在上一篇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,即无中间的#号。
相关推荐
在本案例中,我们讨论的是 Solr 的一个特定版本——"solr-8.5.2.zip",这是一个已经配置好的版本,适用于快速部署和使用。这个压缩包包含了对 MySQL 数据库的集成配置,以及针对中文分词的支持,还配置了 Solr 的...
通过Solr客户端,我们可以与Solr服务器进行交互,实现数据的增删查改。 首先,我们需要了解Solr的基本概念。Solr服务器通常运行在一个独立的Java应用服务器上,如Tomcat。它包含几个核心组件,如索引、查询解析器、...
——SolrJ客户端和一个二元响应协议,支持更快的客户端-服务器通信 ——搜索组件可以被组成链式结构,用来提供更灵活的查询处理。组件包括现有的功能如faceting(多侧面搜索),同时添加More Like This(更多类似的...
Solr 是一个流行的开源搜索引擎,提供了全文搜索、高级查询语法、多语言支持等功能。在 Solr 8 中,为了确保系统的安全性和数据的隐私性,配置用户登录验证是非常重要的步骤。本文将详细介绍如何对手动配置 Solr 8 ...
1. 异步操作支持:通过使用SolrJ,可以实现非阻塞的索引操作,提高系统的吞吐量。 2. 集群支持:SolrJ可以无缝地与Solr集群通信,实现分布式搜索和负载均衡。 3. JSON和XML支持:SolrJ能够处理Solr的多种响应格式,...
这就引出了我们的第二个主角——Solr。Solr是基于Lucene构建的企业级搜索平台,它为Lucene提供了更高级的API和更易用的管理界面。Solr的核心特性包括: 1. **配置友好**:Solr通过XML配置文件定义索引字段和处理...
本书涵盖了超过100个实用的配方,旨在帮助读者发现与Apache的企业级搜索服务器——Solr——交互的新方法。Solr是一个高度可扩展、高性能的开源全文搜索平台,广泛应用于各种企业级应用中,提供快速、精准的搜索功能...
综上所述,全文检索客户端代码是实现高效、便捷搜索的关键,无论是Solr还是Elasticsearch,都可以通过其提供的Java客户端工具实现数据的增删改查。在实际应用中,应根据项目需求和团队技能选择合适的全文检索引擎,...
标题中的“搜索引擎solr和elasticsearchJava开发J”提到了两个关键的开源搜索技术——Apache Solr和Elasticsearch,以及它们与Java的结合使用。这两个都是基于Lucene库的全文检索引擎,广泛应用于大数据量的全文搜索...
"Sullerj examples"可能包含了示例代码,展示了如何使用Suller与Solr进行交互,而"具有更丰富的文档绑定"意味着Suller提供了更多的功能和文档支持,以便开发者能够更方便地集成Solr到他们的应用中。 标签"开源项目...
#### 四、案例分享——《品优购》搜索功能实现 1. **系统架构**: - 基于Dubbo的服务框架,结合Solr集群实现高效搜索。 - 使用Nginx作为前端负载均衡器。 - Zookeeper集群用于管理服务发现与配置。 2. **搜索...
Java可以用来实现这些功能,例如使用Jsoup库进行网页抓取,Apache Lucene进行索引和搜索,以及Solr或Elasticsearch进行分布式搜索服务。 二、Java在搜索引擎中的应用 1. 爬虫:Java中的Jsoup库允许开发者解析HTML...