为什么80%的码农都做不了架构师?>>>   

Solr5操作

界面操作

Document操作索引

Query查询索引

Java操作

创建maven项目,在maven项目中导入依赖

<dependency>

<groupId>org.apache.solr</groupId>

<artifactId>solr-solrj</artifactId>

<version>4.10.1</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.7.7</version>

</dependency>

<dependency>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

<version>1.1.3</version>

</dependency>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.3.2</version>

</dependency>

/**

* 使用document来插入index

* @throws  SolrServerException

* @throws  IOException

*/

@Test

public void addIndexBydocuments() throws SolrServerException, IOException{

HttpSolrServer server = new HttpSolrServer("http://127.0.0.1:8983/solr/core_one");

//使用document来操作solr

SolrInputDocument solrInputDocument = new SolrInputDocument();

//设置记录的每个必须属性,非必须的属性按需设置

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

solrInputDocument.addField("title", "华为手机低价处理");

solrInputDocument.addField("price", 1255);

solrInputDocument.addField("name", "华为手机");

server.add(solrInputDocument); //使用document添加记录

server.commit(); //提交操作

}

使用bean类直接操作index

public class Item {

@Field

private String id;

@Field

private String name;

@Field

private String title;

@Field

private long price;

}

注:在shema中存在的field必须加上@Field注解,否则会报错

/**

* 使用bean对象添加index

* @throws Exception

*/

@Test

public void addIndexByBean() throws Exception{

HttpSolrServer server = new HttpSolrServer("http://127.0.0.1:8983/solr/wxdlCore");

//封装bean对象

Item item = new Item();

item.setId("6");

item.setName("小米手机");

item.setPrice(999l);

item.setTitle("小米手机热销中");

//根据bean添加索引

server.addBean(item);

server.commit();

}

/**

* 根据id删除index

* @throws Exception

*/

@Test

public void delIndexById() throws Exception{

HttpSolrServer server = new HttpSolrServer("http://127.0.0.1:8983/solr/wxdlCore");

server.deleteById("change.me");

server.commit();

}

/**

* 根据表达式查询结果删除

* @throws Exception

*/

@Test

public void delIndexByExpression() throws Exception{

HttpSolrServer server = new HttpSolrServer("http://127.0.0.1:8983/solr/wxdlCore");

server.deleteByQuery("title:小米*");

server.commit();

}

deleteByQuery(query) 此处的query是一个solrQuery,对应query界面中的q :

/**

* 对index的修改就是对已存在的index进行添加操作,主键不修改

* @throws SolrServerException

* @throws IOException

*/

@Test

public void updateIndex() throws IOException, SolrServerException{

Item item = new Item();

item.setId("6");

item.setTitle("小米2 火热来袭 低价热销");

item.setName("小米2");

server.addBean(item);

server.commit();

}

/**

* 使用document获取查询结果

* @throws Exception

*/

@Test

public void getIndexByDocument() throws Exception{

SolrQuery solrQuery = new SolrQuery("title:*");

QueryResponse query = server.query(solrQuery);

SolrDocumentList results = query.getResults();

for (SolrDocument solrDocument : results) {

System.out.println(solrDocument.getFieldValue("name")+"....."+solrDocument.getFieldValue("title"));

}

}

/**

* 使用bean来直接获取结果

* @throws Exception

*/

@Test

public void selectIndexs() throws Exception{

SolrQuery query = new SolrQuery("title:*");

query.setRows(10);

query.setFields("name" , "title");

QueryResponse query2 = server.query(query);

List<Item> beans = query2.getBeans(Item.class);

for (Item item : beans) {

System.out.println(item.getName()+"......."+item.getTitle());

}

}

怎么样同时查title和content ?

a)采用 <copyField> ,将title和content设置到text的field中

b)根据服务器 solrconfig.xml 配置 df 默认查询字段进行查询

<requestHandler name="/select" class="solr.SearchHandler">

<lst name="defaults">

<str name="echoParams">explicit</str>

<int name="rows">10</int>

<str name="df">text</str>

</lst>

</requestHandler>

注:不推荐用name来设置进copyfield中,查询的结果会空

/**

* 高亮显示

* @throws Exception

*/

@Test

public void  getHightlighter() throws Exception{

SolrQuery query = new SolrQuery("title:手机");

//设置高亮相关配置

query.setHighlight(true); //开启高亮

query.addHighlightField("title"); //设置需要高亮的字段,可设置多个

query.addHighlightField("content"); //设置需要高亮的字段,可设置多个

query.addHighlightField("name"); //设置需要高亮的字段,可设置多个

query.setHighlightFragsize(100); //设置摘要的长度

query.setHighlightSimplePre("<font color='red'>"); //设置高亮前缀

query.setHighlightSimplePost("</font>"); //设置高亮后缀

//------------

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

Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); //高亮内容集合

System.out.println(highlighting);

Set<String> keySet = highlighting.keySet(); //获取的是主键的set集合

//遍历获取所有的高亮内容

for (String string : keySet) {

Map<String, List<String>> map = highlighting.get(string);

Set<String> fieldKeys = map.keySet();

for (String string2 : fieldKeys) {

List<String> list = map.get(string2);

for (String string3 : list) {

System.out.println(string3);

}

}

}

}

结果:

{3={name=[华为<font color='red'>手机</font>], title=[华为<font color='red'>手机</font>低价处理], content=[华为<font color='red'>手机</font>是中国知名品牌的<font color='red'>手机</font>产品]}, 6={name=[小米<font color='red'>手机</font>], title=[小米<font color='red'>手机</font>热销中], content=[小米<font color='red'>手机</font>是<font color='red'>手机</font>界的新起之秀]}}

华为<font color='red'>手机</font>

华为<font color='red'>手机</font>低价处理

华为<font color='red'>手机</font>是中国知名品牌的<font color='red'>手机</font>产品

小米<font color='red'>手机</font>

小米<font color='red'>手机</font>热销中

小米<font color='red'>手机</font>是<font color='red'>手机</font>界的新起之秀

转载于:https://my.oschina.net/wxdl/blog/698922

solr5的基本操作相关推荐

  1. 数据结构(03)— 数据处理基本操作(数据的查找、新增、删除、修改)

    我们先来看一个关于查找的例子.查找,就是从复杂的数据结构中,找到满足某个条件的元素.通常可从以下两个方面来对数据进行查找操作:​ 根据元素的位置或索引来查找: 根据元素的数值特征来查找. 针对上述两种 ...

  2. pytorch方法,Tensor及其基本操作_重点

    由于之前的草稿都没了,现在只有重写-. 我好痛苦 本章只是对pytorch的常规操作进行一个总结,大家看过有脑子里有印象就好,知道有这么个东西,需要的时候可以再去详细的看,另外也还是需要在实战中多运用 ...

  3. Gradle安装使用以及基本操作

    转自:https://www.cnblogs.com/linkstar/p/7899191.html Gradle安装使用以及基本操作 阅读目录 简单介绍 安装 使用idea创建一个web的Gradl ...

  4. c++文件读取空格_程序员术与道:术—C语言对文件进行处理,文件处理的基本操作...

    各种编程语言都实现了文件的基本操作,提供了对应的接口,本篇文章先为你介绍C语言对文件进行处理和文件处理的基本操作.主要从以下几个方面进行介绍: 读取文件 写入文件 重命名文件 读取目录 读取目录下的文 ...

  5. 【Pandas库】(3) DataFrame的创建方法及基本操作

    各位同学好,今天给大家介绍一下Pandas库中DataFrame类型数据的创建方法和基本操作. 文章内容如下: (1)使用字典类创建. 字典类有:①数组.列表.元组构成的字典:②Series构造的字典 ...

  6. 【MySQL】缩略语PK NN UQ BIN UN ZF AI G、基本操作语句

    一.缩略语 PK:primary key 主键 NN:not null 非空 UQ:unique 唯一索引 BIN:binary 二进制数据 UN:unsigned 无符号整数(非负数) ZF:zer ...

  7. MySQL中定义fk语句_MySQL基础篇/第3篇:MySQL基本操作语句.md · qwqoo/MySQL-Review - Gitee.com...

    ### 第3篇:MySQL基本操作语句 - MySQL基础操作 #### 排序检索数据 - 之前的数据没有进行排序,其是按照默认在数据表中的数据返回的 - SELECT语句的ORDER BY 子句进行 ...

  8. OpenCV-Java版学习(3.对视频的基本操作)

    前言 上一节我们学习了使用OpenCV对图像进行一些基础操作,现在我们学习对视频进行一些基础的操作. 对视频的基本操作 从相机中读取视频 我们从电脑自带的摄像头捕捉一段视频并在屏幕上显示出来,代码如下 ...

  9. JDBC编程:2(数据库的基本操作)

    数据库的基本操作 查询数据 在开始前先简单地介绍一下什么是静态SQL和动态SQL: 静态SQL,在编译阶段就可以确定数据库要做什么事情.在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结 ...

最新文章

  1. 自己实现文本相似度算法(余弦定理)
  2. 哪些模块可用于python性能分析_Python调用C模块以及性能分析
  3. python扫描端口脚本_Python端口扫描简单程序
  4. python3.0内建函数大全_python3内置函数大全
  5. 2021-01-07 Halcon初学者知识【8】 将图像部分内容截取并保存
  6. SharePoint 2013 术语和术语集介绍
  7. 大端小端区别、Union和Struct的内存分配
  8. python可以做二维码吗_Python制作二维码,并且可以添加logo
  9. 高等数学上-赵立军-北京大学出版社-题解-练习3.4
  10. 【需求工程】需求工程
  11. spring-boot两小时入门笔记
  12. java代码鸡兔同笼_鸡兔同笼 java代码
  13. 机房服务器存放位置要求,服务器机房建设设计要求规范.doc
  14. 五金模具设计统赢外挂提升效率技巧、外挂模具设计流程的问题归纳
  15. ubuntu下配置msmtp+mutt发送邮件
  16. Docker 核心技术与实现原理
  17. 从DataSet 导出到Excel(是DataSet中的每个DataTable对应每个Sheet)
  18. 4. 模板 STL容器
  19. java中基本数据类型和引用数据类型各有什么特点
  20. vue 使用window的对象_如何3分钟把VUE项目打包成apk

热门文章

  1. 生成删除约束语句 SQL语句
  2. mysql5.7版本源_用最新MySQL 8.0的源安裝MySQL 5.7版本(CentOS 7環境下)
  3. centos 配置bond_CentOS 网卡配置bond4(LACP)
  4. 计算机的图形用户界面,2017计算机等级考试知识点:认识图形用户界面
  5. 全国大学生智能车竞赛赛场准备好,就等同学们入驻展示
  6. 在MM32F3273上运行MicroPython,对于性能进行测试
  7. 基于ESP8266WiFi步进电机控制
  8. 为什么使用RLC表测量电感在不同的频率测量值不同呢?
  9. apache2配置和使用
  10. 新手焊接电路板_【实验】新手焊接电路板的不完全指南