SolrSelectTest 查询与删除 
package com.snow.solr;

import com.snow.bean.Product;
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.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.junit.Test; import java.util.ArrayList;
import java.util.List;
import java.util.Map; public class SolrSelectTest { public SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1"); //1. solr的基本查询
@Test
public void baseQueryToSolr() throws SolrServerException {
//1. 创建solrServer对象
// SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1"); //2. 执行查询: *:* 查询全部
SolrQuery solrQuery = new SolrQuery("华为"); QueryResponse response = solrServer.query(solrQuery); //3. 解析response
SolrDocumentList documents = response.getResults(); for (SolrDocument document : documents) { Object id = document.get("id");
Object title = document.get("title");
Object content = document.get("content");
System.out.println(id+" "+title+" "+content+" "); }
} //1.查询后返回javaBean
@Test
public void javaBeanQueryToSolr() throws SolrServerException {
//1. 创建solrServer对象
// SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1"); //2. 执行查询: *:* 查询全部
SolrQuery solrQuery = new SolrQuery("*:*"); QueryResponse response = solrServer.query(solrQuery); //3. 解析response
List<Product> list = response.getBeans(Product.class); for (Product product : list) {
System.out.println(product.toString());
}
} // solr的复杂查询:
// 提取一个公共的查询方法
public void baseQuery(SolrQuery solrQuery) throws SolrServerException {
//1. 创建solrServer对象
// SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1"); //2. 执行查询: *:* 查询全部 QueryResponse response = solrServer.query(solrQuery); //3. 解析response
SolrDocumentList documents = response.getResults();
System.out.println(documents.size()); List<Product> list = response.getBeans(Product.class); for (Product product : list) {
System.out.println(product);
}
} //1. 通配符查询: ? *
// ? 表示一个字符
// * 表示多个字符(0到多个)
@Test
public void wildCardQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("name:HUAWEI"); solrQuery.setRows(20);//显示多少条数据
baseQuery(solrQuery);
} //2. 布尔查询
@Test
public void booleanQueryToSolr() throws SolrServerException {
//2. 执行查询:
/**
* 1.布尔查询:
* AND OR NOT:
* AND : MUST
* OR: SHOULD
* NOT : MUST_NOT
*/
SolrQuery solrQuery = new SolrQuery("content:lucene OR name:iPhone"); solrQuery.setRows(20);//显示多少条数据
baseQuery(solrQuery); }
//3. 子表达式查询
@Test
public void expressionQueryToSolr() throws SolrServerException {
//表达式查询: (条件1 [or and not] 条件2 ) [and or not] (条件1 [or and not] 条件2)
SolrQuery solrQuery = new SolrQuery("(content:lucene NOT name:iPhone) or name:HUAWEI"); solrQuery.setRows(20);//显示多少条数据
baseQuery(solrQuery);
} //4. 相识度查询
@Test
public void fuzzQueryToSolr() throws SolrServerException {
//相识度查询: ~
// 格式: 字段名称: 字段值~ 表示最大编辑2次
// 字段名称: 字段值~1 表示最大编辑1次
SolrQuery solrQuery = new SolrQuery("name:HUAW~2"); solrQuery.setRows(20);//显示多少条数据
baseQuery(solrQuery);
} //5. 范围查询
@Test
public void rangeQueryToSolr() throws SolrServerException {
//范围查询: 支持数值 日期 文本
// 格式 [ 开始 TO 结束 ] 包含边界值
SolrQuery solrQuery = new SolrQuery("id:[0 TO 1]"); solrQuery.setRows(20);//显示多少条数据
baseQuery(solrQuery); } //6. solr的排序
@Test
public void sortQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("*:*");
//设置排序:
// 参数1 指定排序的字段 参数2: 排序方式 asc 和 desc
SolrQuery.SortClause sortClause = new SolrQuery.SortClause("price", "desc");
SolrQuery.SortClause sortClause2 = new SolrQuery.SortClause("id", "desc"); List<SolrQuery.SortClause> list = new ArrayList<SolrQuery.SortClause>();
list.add(sortClause);
list.add(sortClause2);
/**
* 多个排序
*/
solrQuery.setSorts(list);
/**
* 单个排序
*/
//solrQuery.setSort("id", SolrQuery.ORDER.desc); solrQuery.setRows(20);//显示多少条数据
baseQuery(solrQuery);
} //7. solr的分页
@Test
public void limitQueryToSolr() throws SolrServerException {
//定义两个参数
int page = 1;//当前页
int pageSize = 1; //每页的条数 SolrQuery solrQuery = new SolrQuery("*:*");
solrQuery.setStart((page-1)*pageSize);
solrQuery.setRows(pageSize);//显示多少条数据
baseQuery(solrQuery);
} //8. solr的高亮
@Test
public void highlighterQueryToSolr() throws SolrServerException {
//1. 创建solrServer对象
// SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1"); //定义两个参数
int page = 1;//当前页
int pageSize = 3; //每页的条数 SolrQuery solrQuery = new SolrQuery("title:贵 OR name:HUAW~2"); //设置高亮------开始
solrQuery.setHighlight(true);
solrQuery.addHighlightField("title");
solrQuery.addHighlightField("name");
solrQuery.setHighlightSimplePre("<font color='red'>");
solrQuery.setHighlightSimplePost("</font>");
solrQuery.setHighlightSnippets(10); //设置最大的分片数,默认为1, 主要针对如果是多字段的情况
//设置高亮------结束
solrQuery.setStart((page-1)*pageSize);
solrQuery.setRows(pageSize);//显示多少条数据 QueryResponse response = solrServer.query(solrQuery);
//获取高亮的集合
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); for (String docID : highlighting.keySet()) {
//获取对应文档的高亮集合
Map<String, List<String>> map = highlighting.get(docID); List<String> list = map.get("name");
if (list != null) {
System.out.println("list的长度"+list.size()); System.out.println("高亮内容"+list.get(0));
}
list = map.get("title");
if (list != null) {
System.out.println("list的长度"+list.size()); System.out.println("高亮内容"+list.get(0));
}
}
} }

  

SolrSaveDelete 保存于删除
package com.snow.solr;

import com.snow.bean.Product;
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.common.SolrInputDocument;
import org.junit.Test; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class SolrSaveDelete { public SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1"); //1. solr的基础入门案例
@Test
public void createIndexToSolr() throws IOException, SolrServerException { //1. 创建solrj对象
// SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1"); //2.1 添加document对象(此处为solr的document)
SolrInputDocument doc = new SolrInputDocument(); doc.addField("id","1");
doc.addField("content","我是一个中国人, 我喜欢我们的国家");
doc.addField("title","简介"); //2. 进行索引的添加
solrServer.add(doc);
//3. 提交索引
solrServer.commit();
} //2. 写入多条索引
@Test
public void createManyIndexToSolr() throws IOException, SolrServerException {
//1. 创建solrServer对象
// SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1");
//2.1 设置多条数据
List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
for(int i=0 ; i<10 ; i++){
//2.1.1 创建一个document
SolrInputDocument document = new SolrInputDocument();
document.addField("id",i);
document.addField("content","solr是一个独立的企业级搜索应用服务器, 可以通过http请求访问这个服务器, 获取或者写入对应的内容, 其底层是Lucene "+i);
document.addField("title","solr的简介"); //2.1.2 将document添加到集合中
docs.add(document);
} //2. 写入索引
solrServer.add(docs); //3. 提交索引
solrServer.commit();
} //3. 通过javaBean向solr写入索引
@Test
public void createIndexJavaBeanToSolr() throws IOException, SolrServerException {
//1. 创建solrServer对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1");
//2.1 创建product对象, 写入索引
Product product = new Product();
product.setId("11");
product.setName("HUAWEI Mate 20");
product.setBrand("华为");
product.setPrice(4999.0F);
product.setTitle("亮瞎你的双眼,没办法就是好用");
//2. 写入索引
solrServer.addBean(product);
//3. 提交索引
solrServer.commit(); } //4. 删除索引的操作
//修改的操作这里不演示, 当id相同就是修改, id不同就是添加
@Test
public void deleteIndexToSolr() throws IOException, SolrServerException {
//1. 创建solrServer对象
// SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1");
//2. 执行删除
//solrServer.deleteById("10"); //通过id删除, 可以传递一 个id , 也可以传递一个ids数组进行删除
// 条件的基本格式: 字段名称:字段值
solrServer.deleteByQuery("*:*"); //根据条件删除 *:* 删除全部
//3.执行提交
solrServer.commit();
} }
        <dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.2</version>
</dependency>
<!--日志的包, solrj执行需要一个日志包-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.1</version>
</dependency>
</dependencies>

Lucene与Solr基础的更多相关文章

  1. lucene和solr

    我们为什么要用solr呢? 1.solr已经将整个索引操作功能封装好了的搜索引擎系统(企业级搜索引擎产品) 2.solr可以部署到单独的服务器上(WEB服务),它可以提供服务,我们的业务系统就只要发送 ...

  2. 使用 Apache Lucene 和 Solr 4 实现下一代搜索和分析

    使用 Apache Lucene 和 Solr 4 实现下一代搜索和分析 使用搜索引擎计数构建快速.高效和可扩展的数据驱动应用程序 Apache Lucene™ 和 Solr™ 是强大的开源搜索技术, ...

  3. 开源搜素引擎:Lucene、Solr、Elasticsearch、Sphinx优劣势比较

    https://blog.csdn.net/belalds/article/details/82667692 开源搜索引擎分类 1.Lucene系搜索引擎,java开发,包括: Lucene Solr ...

  4. 全文索引-lucene,solr,nutch,hadoop之nutch与hadoop

    全文索引-lucene.solr.nutch,hadoop之lucene 全文索引-lucene.solr,nutch,hadoop之solr 我在去年的时候,就想把lucene,solr.nutch ...

  5. 【solr基础教程之一】Solr相关知识点串讲

           Solr是Apache Lucene的一个子项目.Lucene为全文搜索功能提供了完备的API,但它只作为一个API库存在,而不能直接用于搜索.因此,Solr基于Lucene构建了一个完 ...

  6. Solr学习之二-Solr基础知识

    一 基本说明 简单来说Solr是基于Lucene的高性能的,开源的Java企业搜索服务器.Solr可以看作一个Web app,运行在tomcat或Jetty这类HTTP服务器上, 底层是一个基于Luc ...

  7. lucene、solr中的日期衰减方法-------function query --尚未测试在solr4.8

    经常有一种情景是这样的:我们索引了N年的文章,而查询时候无论直接用相关度.或者用时间排序,都是比较鲁莽的:我们想要一种既要相关度比较高,又要时间上比较新的文章. 这时候的解决办法就是,自定义日期衰减的 ...

  8. 【solr基础教程之中的一个】Solr相关知识点串讲

           Solr是Apache Lucene的一个子项目.Lucene为全文搜索功能提供了完备的API.但它仅仅作为一个API库存在.而不能直接用于搜索. 因此,Solr基于Lucene构建了一 ...

  9. Solr基础知识二(导入数据)

    上一篇讲述了solr的安装启动过程,这一篇讲述如何导入数据到solr里. 一.准备数据 1.1 学生相关表 创建学生表.学生专业关联表.专业表.学生行业关联表.行业表.基础信息表,并创建一条小白的信息 ...

随机推荐

  1. python3解析库lxml

    阅读目录 1.python库lxml的安装 2.XPath常用规则 (1)读取文本解析节点 (2)读取HTML文件进行解析 (3)获取所有节点 (4)获取子节点 (5)获取父节点 (6)属性匹配 (7 ...

  2. 堆优化dijstra

    因为spfa没事就被卡一卡,所以堆优化dijstra就显得很重要,在最短路或者其模型里边,最少有一条边是没有被更新过的,也就是它是最短的,同理从这个点开始也有一条边最短,所以每次就找最短的然后松弛操作 ...

  3. NiftyNet开源平台使用

    NiftyNet是一款开源的卷积神经网络平台,专门针对医学图像处理分析,上一篇博客已经详细介绍了这个平台,接下来让我简单介绍一下目前我了解到的使用方法.更详细的使用方法.以及配置过程请查看NiftyN ...

  4. 解决Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-f8IeEI/MYSQL-python/

    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-f8IeEI/MYS ...

  5. python数据结构之队列(一)

    队列概念 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出的(First In First Out)的线性表,简称FIFO.允许插入的一端为队尾,允许 ...

  6. Fruit HDU - 2152 -上下界生成函数

    HDU - 2152 思路 :有上下界的生成函数 .生成函数即母函数,是组合数学中尤其是计数方面的一个重要理论和工具.生成函数有普通型生成函数和指数型生成函数两种, 其中普通型用的比较多.形式上说,普 ...

  7. 英语口语练习系列-C31-图书-谈论事物-白雪歌送武判官归京

    book your favorite book a story in your childhood a character in film or TV 词汇 含义 备注 trend 趋势 indivi ...

  8. Android多线程的使用

    The speed and efficiency of a long-running, data-intensive operation often improves when you split i ...

  9. 潭州课堂25班:Ph201805201 tornado 项目 第四课 增加用户注册登录(课堂笔记)

    tornado 相关说明 在 handlers 中创建个 auth.py 用来做用户登录,在这文件中创建个类,并逐步完善 在 tornado 中创建 login.html 文件,是个登录页面 {% e ...

  10. 通过Quartz 配置定时调度任务:使用cron表达式配置时间点

    Cron官网入口 在后台经常需要一些定时处理的任务,比如微信相关应用所需的access_token,就要定时刷新,官方返回的有效性是7200s,也就是2小时,但是为了保险起见,除了在发现access_ ...