博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lucene与Solr基础
阅读量:4878 次
发布时间:2019-06-11

本文共 9890 字,大约阅读时间需要 32 分钟。

 
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
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
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
list = new ArrayList
(); 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("
"); solrQuery.setHighlightSimplePost(""); solrQuery.setHighlightSnippets(10); //设置最大的分片数,默认为1, 主要针对如果是多字段的情况 //设置高亮------结束 solrQuery.setStart((page-1)*pageSize); solrQuery.setRows(pageSize);//显示多少条数据 QueryResponse response = solrServer.query(solrQuery); //获取高亮的集合 Map
>> highlighting = response.getHighlighting(); for (String docID : highlighting.keySet()) { //获取对应文档的高亮集合 Map
> map = highlighting.get(docID); List
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
docs = new ArrayList
(); 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(); }}

 

 

 

org.apache.solr
solr-solrj
4.10.2
commons-logging
commons-logging-api
1.1

 

转载于:https://www.cnblogs.com/chen-lhx/p/10452203.html

你可能感兴趣的文章
JPA 使用报Named query not found错误
查看>>
FTP命令使用详解
查看>>
walmart weekly sales
查看>>
面试题07_用两个栈实现队列——剑指offer系列
查看>>
cocos2d-x3.2中加入Android手机震动
查看>>
css3处理sprite背景图压缩来解决H5网页在手机浏览器下图标模糊的问题
查看>>
温故而知新练习3
查看>>
【转】iOS应用崩溃日志分析
查看>>
EtherCAT Slave 入门教程 - 邮箱服务(1)
查看>>
java基础------抽象类
查看>>
【poj3537】 Crosses ans Crosses
查看>>
【poj1013】 Counterfeit Dollar
查看>>
Centos7 安装配置Apache+Mysql5.7+PHP7.0+phpmyadmin
查看>>
最佳调度问题
查看>>
10.04 FZSZ模拟Day1 总结
查看>>
RabbitMQ学习以及与Spring的集成(二)
查看>>
PHP 扩展开发小结
查看>>
Go语言数据类型
查看>>
textarea在ie中focus不起作用
查看>>
User Get 'Access Denied' with Excel Service WebPart
查看>>