一.SolrJ的概念

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

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

org.apache.solr

solr-solrj

7.4.0

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

junit

junit

4.12

test

org.slf4j

slf4j-nop

1.7.25

二.SolrJ的单机连接

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

不同solr版本solrj 的创建方式有所不同

//solr4创建方式

SolrServer solrServer = newHttpSolrServer(solrUrl);//solr5创建方式,在url中指定core名称:core1

HttpSolrClient solrClient = new HttpSolrClient(solrUrl);//solr7创建方式,在url中指定core名称:core1

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

例如:

package com.xyg.solr;

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

import org.junit.Test;/**

* Author: Mr.Deng

* Date: 2018/9/10

* Desc: 测试连接客户端*/

public classtestConnectionClient {

@Testpublic voidtestConnectionClient(){//设置solr客户端url地址

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

HttpSolrClient solrClient = newHttpSolrClient.Builder(solrUrl)

.withConnectionTimeout(10000)

.withSocketTimeout(60000)

.build();

System.out.println(solrClient);

}

}

三.SolrJ的集群连接

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

package com.xyg.solrCloud;

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

import org.junit.Test;/**

* Author: Mr.Deng

* Date: 2018/9/10

* Desc: 测试连接客户端*/

public classConnectionCloudSolrClient {

@Testpublic voidconnectionCloudSolrClient(){//第一种方式:使用运行中的某一台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= newCloudSolrClient.Builder().withZkHost(zkHost).build();

System.out.println(solrClient);

}

}

四.SolrJ的增删改查

这里测试单机版APi操作

1.创建索引

1)指定id单条创建索引

@Testpublic voidaddIndexById() throws IOException, SolrServerException {

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

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

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

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

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

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

solrClient.add(doc);

solrClient.commit();

}

2)批量创建索引

@Testpublic voidaddIndexByListId() throws Exception {

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

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

SolrInputDocument doc1 = newSolrInputDocument();

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

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

doc1.addField("price", 1.8);

SolrInputDocument doc2= newSolrInputDocument();

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();

}

2.查询索引

1)匹配查询

@Testpublic voidfindIndex1() throws IOException, SolrServerException {

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

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

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

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();

}

2)条件过滤查询

@Testpublic voidfindIndex2() throws IOException, SolrServerException {

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

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

Map queryParamMap = new HashMap();

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

MapSolrParams queryParams = newMapSolrParams(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();

}

3.更新索引

@Testpublic voidupdateIndex() throws IOException, SolrServerException {

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

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

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

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

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

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

solrClient.add(doc);

solrClient.commit();//提交

solrClient.commit();

}

4.删除索引

1)单一条件删除

@Testpublic voiddeleteIndexById() throws IOException, SolrServerException {

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

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

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

solrClient.commit();

}

2)批量条件删除

@Testpublic voiddeleteIndexByListId() throws IOException, SolrServerException {

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

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

ArrayList ids = new ArrayList();

ids.add("2");

ids.add("3");

solrClient.deleteById(ids);//[3]提交

solrClient.commit();//[4]关闭资源

solrClient.close();

}

五.代码报错问题

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

解决方法:

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

2.自定义索引字段

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

参考文档:

solr java api_Solr7.4.0的API(Solrj)操作相关推荐

  1. 大数据-NoSQL数据库-HBase操作框架:Phoenix【Java写的基于JDBC API的操作HBase数据库的SQL引擎框架;低延迟、事务性、可使用sql语句、提供JDBC接口】

    一.Phoenix概述 1.Phoenix 定义 Phoenix 最早是 saleforce 的一个开源项目,后来成为 Apache 的顶级项目. Phoenix 构建在 HBase 之上的开源 SQ ...

  2. solrj java_【solr】java整合solr5.0之solrj的使用

    1.首先导入solrj需要的的架包 2.需要注意的是低版本是solr是使用SolrServer进行URL实例的,5.0之后已经使用SolrClient替代这个类了,在添加之后首先我们需要根据schem ...

  3. java 连接solrcloud_Solr 14 - SolrJ操作SolrCloud集群 (Solr的Java API)

    1 pom.xml文件的配置 2 SolrJ操作SolrCloud public class SolrCloudTest { // ZooKeeper地址 private static String ...

  4. solrj html过滤,Solr7.4.0的API(Solrj)操作

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

  5. solrj java_详解java整合solr5.0之solrj的使用

    1.首先导入solrj需要的的架包 2.需要注意的是低版本是solr是使用SolrServer进行URL实例的,5.0之后已经使用SolrClient替代这个类了,在添加之后首先我们需要根据schem ...

  6. solr java 客户端_Solr JAVA客户端SolrJ的使用

    一.Solrj简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.SolrJ针对 Solr提供了Rest 的HTTP接口进行了封装, SolrJ底 ...

  7. solrj操作单机solr

    2019独角兽企业重金招聘Python工程师标准>>> 在目前的生产过程中全文检索技术应用越来越广,其中涌现了一批非常好得开源搜索引擎框架,如solr,elasticsearch等等 ...

  8. Solr快速入门第七讲——使用SolrJ管理索引库

    什么是SolrJ? SolrJ是访问Solr服务的Java客户端,提供索引(这里指的就是创建索引.更新索引以及删除索引)和搜索(这里指的是查询索引)的请求方法,SolrJ通常嵌入在业务系统中,通过So ...

  9. Android 3.0 r1 API中文文档(107) —— AsyncPlayer

    一.结构 public class AsyncPlayer extends Object java.lang.Object android.media.AsyncPlayer 二.概述 播放一个连续( ...

最新文章

  1. 谁是 2021「IT 圈」年度 C 位?快来报名,彰显你的影响力!
  2. nowcoder 河 我 车 题 错 天 乐 赛 倍增处理
  3. Web API核查表:设计、测试、发布API时需思考的43件事
  4. [Android-Appium]: 安卓自动化测试: 环境准备
  5. python全局变量修改_python中全局变量的修改
  6. HTML5 classList 操作类名
  7. DOS批处理删除文本文件重复的行
  8. STM32F407使用MFRC522射频卡调试及程序移植成功
  9. 16.Linux/Unix 系统编程手册(上) -- 扩展属性
  10. 网站屏蔽搜索引擎的方法
  11. micro macro 区别和详解
  12. python密码字典生成库_python生成密码字典的方法
  13. in use 大学英语4word_(完整word版)全新版大学英语第四册综合教程课后翻译答案及课文译文...
  14. PotPlayer不支持S/W HEVC(H.265)解码怎么办?一招解决所有的不支持解码
  15. Android实现头像上传至数据库与保存 简易新闻(十七 下)
  16. ios开发-- URL Schemes 使用详解
  17. 三星14纳米EUV DDR5 DRAM量产;Amazfit推出三款智能手表;Whale帷幄获5000万美元融资 | 全球TMT...
  18. charles抓包https证书下载
  19. 【附源码】计算机毕业设计SSM汽车维修服务系统
  20. html data-src和src的区别,img 的data-src 属性实现懒加载

热门文章

  1. 设计类时需要注意的6个地方
  2. eclipse同步svn时如何过滤target等文件
  3. 【bzoj4321】queue2 dp
  4. 添加RPMfusion仓库
  5. Mysql基础--表的操作
  6. vs2005手机开发环境的配置
  7. 误删除 linux 系统文件了?这个方法教你解决
  8. 使用app-inspector时报错connect ECONNREFUSED 127.0.0.1:8001的解决方案
  9. 解决在工具栏Chrome图标上点击右键会显示“常去网站”和“最后关闭网站”的问题
  10. 【代码+论文】基于自适应排序学习的个性化推荐方法