1、什么是SolrJ呢?
  答:Solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务。开始配置schema.xml,/home/hadoop/soft/solr-4.10.3/example/solr/collection1/conf。添加IK中文分析器,然后定义定义自己的业务域。

注意:

  a、Indexed,Indexed Field可以进行搜索和排序。你还可以在indexed Field上运行Solr分析过程,此过程可修改内容以改进或更改结果。
  b、Stored,Stored Field内容保存在索引中。这对于检索和醒目显示内容很有用,但对于实际搜索则不是必须的,例如,很多应用程序存储指向内容位置的指针而不是存储实际的文件内容。

 [root@localhost tomcat]# cd /home/hadoop/soft/solr-4.10./
[root@localhost solr-4.10.]# ls
bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
[root@localhost solr-4.10.]# cd example/solr
[root@localhost solr]# ls
bin collection1 README.txt solr.xml zoo.cfg
[root@localhost solr]# cd collection1/
[root@localhost collection1]# ls
conf core.properties data README.txt
[root@localhost collection1]# cd conf/
[root@localhost conf]# ls
admin-extra.html clustering lang protwords.txt _schema_analysis_synonyms_english.json solrconfig.xml synonyms.txt xslt
admin-extra.menu-bottom.html currency.xml mapping-FoldToASCII.txt _rest_managed.json schema.xml spellings.txt update-script.js
admin-extra.menu-top.html elevate.xml mapping-ISOLatin1Accent.txt _schema_analysis_stopwords_english.json scripts.conf stopwords.txt velocity
[root@localhost conf]#

然后添加IK中文分词器,自定义业务域:

其中IK中文分词器,自定义业务域具体内容如下所示:

将这些添加完毕以后,重启Tomcat,然后看看,可以搜索到新增的业务域字段。

 <!-- 然后添加如下配置即可:-->
<fieldType name="text_ik" class="solr.TextField">
<!-- 索引时候的分词器 -->
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"></analyzer>
<!-- 查询时候的分词器 -->
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"></analyzer>
</fieldType> <!--IKAnalyzer Field-->
<!-- type="text_ik"代表使用了Ik中文分词器。 -->
<!-- indexed="true"代表进行索引操作。 -->
<!-- stored="true"代表将该字段内容进行存储。 -->
<field name="product_name" type="text_ik" indexed="true" stored="true" />
<field name="product_price" type="long" indexed="true" stored="true" />
<field name="product_picture" type="string" indexed="false" stored="true" />
<field name="product_description" type="text_ik" indexed="true" stored="true" />
<field name="product_catalog_name" type="string" indexed="true" stored="false" />

可以看到搜索到新增的业务域字段。

2、然后你可以愉快的编程了,嘻嘻。

 package com.taotao.search.service;

 import java.io.IOException;
import java.util.List;
import java.util.Map; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
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.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Before;
import org.junit.Test; /**
* 使用SolrJ创建索引,通过调用SolrJ提供的API请求Solr服务,Document通过SolrInputDocument进行构建。
* 创建索引,使用SolrJ创建索引,通过调用SolrJ提供的API请求Solr服务,Document通过SolrInputDocument进行构建。
*
* @ClassName: ProductSolrUtils.java
* @author: biehl
* @since: 2019年9月12日 上午10:49:13
* @Copyright: ©2019 biehl 版权所有
* @version: 0.0.1
* @Description:
*/
public class ProductSolrUtils { // solr的地址路径
private String solrServerUrl = "http://192.168.110.142:8080/solr-4.10.3/collection1";
private SolrServer solrServer = null; /**
*
*/
@Before
public void before() {
// 初始化执行
// 1、创建SolrServer对象。创建一个HttpSolrServer对象
solrServer = new HttpSolrServer(this.solrServerUrl);
} /**
* 说明:根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。
*
* @throws IOException
* @throws SolrServerException
*
*/
@Test
public void productSolrCreateIndex() {
try {
// 2、需要指定Solr服务的url
// 3、创建一个文档对象SolrInputDocument
SolrInputDocument document = new SolrInputDocument();
// 4、向文档中添加域,必须写id域,域的名称必须在schema.xml中定义
document.addField("id", "p0001");
document.addField("product_name", "小米手机9x");
document.addField("product_price", );
document.addField("product_picture", "好用得咧");
document.addField("product_description", "什么玩意?");
document.addField("product_catalog_name", "手机"); // 5、把文档对象写入到索引库中
// 向solr里面添加文档
UpdateResponse response = solrServer.add(document);
// 6、提交
solrServer.commit();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 删除索引
*
* 说明:deleteById(String id)根据id删除索引,此方法为重载方法,也可以传个多个id批量删除, 也可以调用deleteByQuery()
* 根据查询条件删除
*/
@Test
public void taotaoSolrJDeleteById() {
try {
// 向solr里面添加文档
// 1、创建SolrServer对象。创建一个HttpSolrServer对象
// SolrServer server = new
// HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1"); // 2、 删除操作,//根据id删除
solrServer.deleteById("p0001"); // 3、提交
solrServer.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } /**
* 删除索引,查询条件删除
*
*/
@Test
public void taotaoSolrJDeleteByQuery() {
try {
// 向solr里面添加文档
// 1、创建SolrServer对象。创建一个HttpSolrServer对象
// SolrServer server = new
// HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1"); // 2、 删除操作
solrServer.deleteByQuery("id:p0002"); // 3、提交
solrServer.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /**
*
*/
@Test
public void searchDocument() {
try {
// 1、创建一个SolrServer对象
// SolrServer solrServer = new
// HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1");
// 2、创建一个SolrQuery对象
SolrQuery solrQuery = new SolrQuery();
// 3、设置查询条件,过滤条件,分页条件,排序条件,高亮
// key的q就是指查询条件。
// solrQuery.set("q", "*:*"); //等价于solrQuery.setQuery("*:*");
// 查询所有的不能指定高亮的。
// solrQuery.setQuery("*:*");// *:*是查询出所有的。
// 这里没有指定在那里域上面进行搜索,所以需要指定默认搜索域
solrQuery.setQuery("小米手机9");
// 分页默认是0-10。分页条件。
solrQuery.setStart();// 起始数
solrQuery.setRows();// 查询出多少条
// 设置默认搜索域。就是如果Query不设置查询那个字段,这里必须指定一个默认值,进行搜索。
solrQuery.set("df", "product_name");
// 设置高亮。
solrQuery.setHighlight(true);// 开启高亮
// 设置高亮显示的域
solrQuery.addHighlightField("product_catalog_name");
// 设置高亮显示的前缀和后缀
solrQuery.setHighlightSimplePre("<em>");
solrQuery.setHighlightSimplePost("</em>"); // 4、执行查询,得到一个Response对象
QueryResponse response = solrServer.query(solrQuery); // 5、取出查询结果总记录数
SolrDocumentList solrDocumentList = response.getResults();
// 查询出结果总记录数
System.out.println("查询结果总记录数: " + solrDocumentList.getNumFound()); for (SolrDocument solrDocument : solrDocumentList) {
System.out.println("id : " + solrDocument.get("id"));
// 取出高亮显示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(solrDocument.get("id")).get("product_name");
String product_name = "";
if (list != null && list.size() > ) {
product_name = list.get();
} else {
product_name = (String) solrDocument.get("product_name");
}
System.out.println(product_name);
System.out.println("product_price : " + solrDocument.get("product_price"));
System.out.println("product_picture : " + solrDocument.get("product_picture"));
System.out.println("product_description : " + solrDocument.get("product_description"));
System.out.println("product_catalog_name : " + solrDocument.get("product_catalog_name"));
System.out.println("=============================================");
} // 提交
solrServer.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } }

查询删除效果如下所示:

使用SolrJ(即java客户端)开发Solr。的更多相关文章

  1. Kafka Java 客户端开发

    依赖包导入 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.1 ...

  2. 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)

    fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...

  3. HBase的java客户端测试(二)---DML操作

    测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...

  4. HBase的java客户端测试(一)---DDL操作

    测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...

  5. Solr JAVA客户端SolrJ的使用

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

  6. Solr JAVA客户端SolrJ 4.9使用示例教程

    http://my.oschina.net/cloudcoder/blog/305024 简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.So ...

  7. 利用java反射机制编写solr通用的java客户端

    一.前言 通过上一篇的讲解,我们知道了dynamicFiled字段,它是动态的,不需要显示的声明.而且一些常用的基本类型solr已经默认给我们创建好了. 例如:*_i,*_is,等. 如果我们要使用动 ...

  8. [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推)

    [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推) 内部推荐职位 高级JAVA技术经理: 岗位职责: 负责项目管理(技术方向),按照产品开发流 ,带领研发团队,制定 ...

  9. java websocket开发的客户端程序

    最近用java websocket开发的客户端程序,在和服务端链接通后,在数据传输完毕后,客户端自动关闭了链接,如何能保持链接不断开 这个是客户端的启动类,在循环完毕后,会自动断开和服务器的链接,开始 ...

随机推荐

  1. python处理sqlserver数据库的返回数据

    上代码: import SqlHelper.MSSQL as MS import pandas as pd if __name__ == '__main__': #连接数据库 ms = MS.MSSQ ...

  2. WeakHashMap,源码解读

    概述 WeakHashMap也是Map接口的一个实现类,它与HashMap相似,也是一个哈希表,存储key-value pair,而且也是非线程安全的.不过WeakHashMap并没有引入红黑树来尽量 ...

  3. Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析

    Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...

  4. linux下 sort | uniq | wc | less 几个命令的基本用法

    sort -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法: -n :使用『纯数字』进行 ...

  5. Java垃圾收集器——Serial,Parallel,CMS,G1收集器概述

    1.概述 Java应用启动的时候,除了配置Xms以及Xmx参数(Xmx:InitialHeapSize, Xms:MaxHeapSize),还需要选择合适的垃圾收集器. 截止Jdk1.8,共提供了7款 ...

  6. 1.JavaCC安装与测试

      下面介绍的是JavaCC在windows系统中的安装与小代码测试过程. 一.JavaCC安装   步骤 :在JavaCC的官网首页下载JavaCC,然后配置电脑的环境变量,接着在dos命令行里就可 ...

  7. 爬虫---lxml爬取博客文章

    上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地 爬取博客园博客 爬取思路: 1.首先找到需要爬取的博客园地址 2.解析博客园地址 # coding:utf-8 i ...

  8. 01-CSS3-justify-content: space-around; justify-content: space-between;

    /* justify-content: space-around; 运用在父级元素上 第一个子元素距离左边的距离==最后一个子元素距离右边的距离 除第一个子元素和最后一个子元素外,第2个,第3个... ...

  9. aa:function()和function aa()

    1.function aa() function aa()是定义的函数 function aa(){var a=5;}var c = aa(); //aa函数已经执行完,c 代表bb变量并没有被收回 ...

  10. 史上最全的LaTeX特殊符号语法

    史上最全的LaTeX特殊符号语法 运算符 语法 效果 语法 效果 语法 效果 + \(+\) - \(-\) \triangleleft \(\triangleleft\) \pm \(\pm\) \ ...