热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

solrjhtml过滤,Solr7.4.0的API(Solrj)操作

一.SolrJ的概念SolrJ是一个API,它使用Java(或任何基于JVM的语言)编写的应用程序可以轻松地与Solr交谈。SolrJ隐藏了许多连接到Solr的细节&

一.SolrJ的概念

SolrJ是一个API,它使用Java(或任何基于JVM的语言)编写的应用程序可以轻松地与Solr交谈。SolrJ隐藏了许多连接到Solr的细节,并允许您的应用程序通过简单的高级方法与Solr交互。SolrJ支持大多数Solr API,并且具有高度可配置性。

这里使用Maven构建项目,请将以下内容放入pom.xml:

org.apache.solr

solr-solrj

7.4.0

AAffA0nNPuCLAAAAAElFTkSuQmCC

为了方便测试,导入单元测试依赖和日志依赖

AAffA0nNPuCLAAAAAElFTkSuQmCC

junit

junit

4.12

test

org.slf4j

slf4j-nop

1.7.25

AAffA0nNPuCLAAAAAElFTkSuQmCC

二.SolrJ的单机连接

SolrClient是一个抽象类,下边有很多被实现的子类,HttpSolrClient - 面向以查询为中心的工作负载,但也是一个很好的通用客户端。直接与单个Solr节点通信。

不同solr版本solrj 的创建方式有所不同//solr4创建方式SolrServer solrServer = new HttpSolrServer(solrUrl);

//solr5创建方式,在url中指定core名称:core1

HttpSolrClient solrClient = new HttpSolrClient(solrUrl);

//solr7创建方式,在url中指定core名称:core1

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();

例如:

AAffA0nNPuCLAAAAAElFTkSuQmCCpackage com.xyg.solr;

import org.apache.solr.client.solrj.impl.HttpSolrClient;

import org.junit.Test;/**

* Author: Mr.Deng

* Date: 2018/9/10

* Desc: 测试连接客户端 */public class testConnectionClient {

@Test    public void testConnectionClient(){        //设置solr客户端url地址

String solrUrl = "http://node21:8080/solr/new_core";        //创建solrClient同时指定超时时间,不指定走默认配置

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl)

.withConnectionTimeout(10000)

.withSocketTimeout(60000)

.build();

System.out.println(solrClient);

}

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

三.SolrJ的集群连接

CloudSolrClient - 面向与SolrCloud部署的通信。使用已记录的ZooKeeper状态来发现并将请求路由到健康的Solr节点。

AAffA0nNPuCLAAAAAElFTkSuQmCCpackage com.xyg.solrCloud;

import org.apache.solr.client.solrj.impl.CloudSolrClient;

import org.junit.Test;/**

* Author: Mr.Deng

* Date: 2018/9/10

* Desc: 测试连接客户端 */public class ConnectionCloudSolrClient {

@Test    public void connectionCloudSolrClient(){        // 第一种方式:使用运行中的某一台solr节点        //final String solrUrl = "http://192.168.100.21:8983/solr";        //CloudSolrClient solrClient = new CloudSolrClient.Builder().withSolrUrl(solrUrl).build();        // 第二种方式:使用zookeeper节点连接(推荐)

final String zkHost = "node21:2181,node22:2181,node23:2181/solr";

CloudSolrClient solrClient = new CloudSolrClient.Builder().withZkHost(zkHost).build();

System.out.println(solrClient);

}

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

四.SolrJ的增删改查

这里测试单机版APi操作

1.创建索引

1)指定id单条创建索引

AAffA0nNPuCLAAAAAElFTkSuQmCC@Testpublic void addIndexById() throws IOException, SolrServerException {

String solrUrl = "http://node21:8080/solr/new_core";

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();    //创建索引文档对象

SolrInputDocument doc = new SolrInputDocument();    // 第一个参数:域的名称,域的名称必须是在schema.xml中定义的    // 第二个参数:域的值,注意:id的域不能少

doc.addField("id","1");

doc.addField("name","红豆");

doc.addField("price","1.2");    //3.将文档写入索引库中    solrClient.add(doc);

solrClient.commit();

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

2)批量创建索引

AAffA0nNPuCLAAAAAElFTkSuQmCC@Testpublic void addIndexByListId() throws Exception {

String solrUrl = "http://node21:8080/solr/new_core";

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();    //创建索引文档对象

SolrInputDocument doc1 = new SolrInputDocument();

doc1.addField( "id", "2");

doc1.addField( "name", "绿豆");

doc1.addField( "price", 1.8 );

SolrInputDocument doc2 = new SolrInputDocument();

doc2.addField( "id", "3" );

doc2.addField( "name", "黑豆" );

doc2.addField( "price", 2.6 );

Collection docs = new ArrayList();

docs.add(doc1);

docs.add(doc2);    //3.将文档写入索引库中    solrClient.add(docs);

solrClient.commit();

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

2.查询索引

1)匹配查询

AAffA0nNPuCLAAAAAElFTkSuQmCC@Test    public void findIndex1() throws IOException, SolrServerException {

String solrUrl = "http://node21:8080/solr/new_core";

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();        // 创建搜索对象

SolrQuery query = new SolrQuery();        // 设置搜索条件

query.set("q","*:*");        //设置每页显示多少条

query.setRows(2);        //发起搜索请求

QueryResponse response = solrClient.query(query);        // 查询结果

SolrDocumentList docs = response.getResults();        // 查询结果总数

long cnt = docs.getNumFound();

System.out.println("总条数为"+cnt+"条");        for (SolrDocument doc : docs) {

System.out.println("id:"+ doc.get("id") + ",name:"+ doc.get("name") + ",price:"+ doc.get("price"));

}

solrClient.close();

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

2)条件过滤查询

AAffA0nNPuCLAAAAAElFTkSuQmCC@Test    public void findIndex2() throws IOException, SolrServerException {

String solrUrl = "http://node21:8080/solr/new_core";

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();        //2 封装查询参数

Map queryParamMap = new HashMap();

queryParamMap.put("q", "*:*");        //3 添加到SolrParams对象,SolrParams 有一个 SolrQuery 子类,它提供了一些方法极大地简化了查询操作

MapSolrParams queryParams = new MapSolrParams(queryParamMap);        //4 执行查询返回QueryResponse

QueryResponse response = solrClient.query(queryParams);        //5 获取doc文档

SolrDocumentList docs = response.getResults();        // 查询结果总数

long cnt = docs.getNumFound();

System.out.println("总条数为" + cnt + "条");        //[6]内容遍历

for (SolrDocument doc : docs) {

System.out.println("id:" + doc.get("id") + ",name:" + doc.get("name") + ",price:" + doc.get("price"));

}

solrClient.close();

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

3.更新索引

AAffA0nNPuCLAAAAAElFTkSuQmCC@Test    public void updateIndex() throws IOException, SolrServerException {

String solrUrl = "http://node21:8080/solr/new_core";

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();        //创建索引文档对象

SolrInputDocument doc = new SolrInputDocument();        //把红豆价格修改为1.5

doc.addField("id","1");

doc.addField("name","红豆");

doc.addField("price","1.5");        //3.将文档写入索引库中        solrClient.add(doc);

solrClient.commit();        //提交        solrClient.commit();

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

4.删除索引

1)单一条件删除

AAffA0nNPuCLAAAAAElFTkSuQmCC@Test    public void deleteIndexById() throws IOException, SolrServerException {

String solrUrl = "http://node21:8080/solr/new_core";

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();        //全删        //solrClient.deleteByQuery("*:*");        //模糊匹配删除(带有分词效果的删除)

solrClient.deleteByQuery("name:红");        //指定id删除        //solrClient.deleteById("1");        solrClient.commit();

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

2)批量条件删除

AAffA0nNPuCLAAAAAElFTkSuQmCC@Test    public void deleteIndexByListId() throws IOException, SolrServerException {

String solrUrl = "http://node21:8080/solr/new_core";

HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();        //通过id删除

ArrayList ids = new ArrayList();

ids.add("2");

ids.add("3");

solrClient.deleteById(ids);        //[3]提交        solrClient.commit();        //[4]关闭资源        solrClient.close();

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

五.代码报错问题

1.代码添加索引报405问题

AAffA0nNPuCLAAAAAElFTkSuQmCC

解决方法:

在使用Tomcat部署Solr后,new_core的地址为:http://node21:8080/solr/#/new_core,但使用SolrJ进行索引的时候,应该使用http://node21:8080/solr/new_core,即无中间的#号。

2.自定义索引字段

AAffA0nNPuCLAAAAAElFTkSuQmCC

上图报错提示未识别索引字段

参考文档:

原文出处:https://www.cnblogs.com/frankdeng/p/9615856.html



推荐阅读
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 深入解析CAS机制:全面替代传统锁的底层原理与应用
    本文深入探讨了CAS(Compare-and-Swap)机制,分析了其作为传统锁的替代方案在并发控制中的优势与原理。CAS通过原子操作确保数据的一致性,避免了传统锁带来的性能瓶颈和死锁问题。文章详细解析了CAS的工作机制,并结合实际应用场景,展示了其在高并发环境下的高效性和可靠性。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 探索Web 2.0新概念:Widget
    尽管你可能尚未注意到Widget,但正如几年前对RSS的陌生一样,这一概念正逐渐走入大众视野。据美国某权威杂志预测,2007年将是Widget年。本文将详细介绍Widget的定义、功能及其未来发展趋势。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
author-avatar
杨建谦461128
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有