*服务器配置略,比较复杂,看视频

1.导入jar包

package cn.itcast.solr;

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test; public class IndexManagerTest { @Test
public void testIndexCreate() throws Exception{
//创建和Solr服务端连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //创建solr文档对象
SolrInputDocument doc = new SolrInputDocument();
//域要先定义后使用,还有注意必须要有id主键域
//solr中没有专用的修改方法, 会自动根据id进行查找,如果找到了则删除原来的将新的加入就是修改,如果没找到,将新的直接加入则就是新增
doc.addField("id", "a001");
doc.addField("product_name", "台灯1`111");
doc.addField("product_price", "12.5"); //将文档加入solrServer对象中
solrServer.add(doc); //提交
solrServer.commit();
} @Test
public void testIndexDel() throws Exception{
//创建和Solr服务端连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //根据主键id进行删除
//solrServer.deleteById("a001"); //根据查询删除,这里是删除所有*:*
solrServer.deleteByQuery("*:*");
//提交
solrServer.commit();
}
}
package cn.itcast.solr;

import java.util.List;
import java.util.Map; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServer;
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; public class IndexSearchTest { @Test
public void testIndexSearch1() throws Exception{
//连接solr服务端
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //创建solr查询条件对象
SolrQuery solrQuery = new SolrQuery();
//查询所有
solrQuery.setQuery("*:*"); //查询并获取查询响应对象
QueryResponse queryResponse = solrServer.query(solrQuery);
//从查询响应中获取查询结果集对象
SolrDocumentList results = queryResponse.getResults();
//打印一共查询到多少条记录,也就是记录总数
System.out.println("=====count====" + results.getNumFound());
//遍历查询结果集
for(SolrDocument doc : results){
System.out.println("============="+doc.get("id"));
System.out.println("============="+doc.get("product_name"));
System.out.println("============="+doc.get("product_price"));
System.out.println("====================================================");
}
} @Test
public void testIndexSearch2() throws Exception{
//连接solr服务端
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //创建solr查询条件对象
SolrQuery solrQuery = new SolrQuery();
//查询关键字输入
solrQuery.setQuery("台灯");
//设置默认搜索域
solrQuery.set("df", "product_keywords");
//设置过滤查询
solrQuery.addFilterQuery("product_price:[1 TO 100]");
//设置排序,这里是降序
solrQuery.setSort("product_price", ORDER.desc);
//=======设置分页========
//设置起始条数
solrQuery.setStart();
//设置查询多少条
solrQuery.setRows(); //========设置高亮显示=======
//高亮默认是关闭的,所以要手动开启
solrQuery.setHighlight(true);
//设置需要高亮显示的域
solrQuery.addHighlightField("product_name");
//设置高亮前缀
solrQuery.setHighlightSimplePre("<span style=\"color:red\">");
//设置高亮后缀
solrQuery.setHighlightSimplePost("</span>"); //===================查询并获取查询响应对象=====================================
QueryResponse queryResponse = solrServer.query(solrQuery);
//从查询响应中获取查询结果集对象
SolrDocumentList results = queryResponse.getResults();
//打印一共查询到多少条记录,也就是记录总数
System.out.println("=====count====" + results.getNumFound());
//遍历查询结果集
for(SolrDocument doc : results){
System.out.println("============="+doc.get("id"));
//获取高亮
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
List<String> list = highlighting.get(doc.get("id")).get("product_name");
if(list != null && list.size() > ){
String hlName = list.get();
System.out.println("=======high lighting=====" + hlName);
} System.out.println("============="+doc.get("product_name"));
System.out.println("============="+doc.get("product_price"));
System.out.println("====================================================");
}
}
}

-------------------------------------------------------------总结------------------------------------------------------------

1.solr是一个全文检索引擎系统,通过部署到tomcat下就可以独立运行,通过http协议对外提供全文检索服务,
就是索引和文档的正删改查服务
2. solr直接操作索引库和文档库, 我们的业务系统中可以使用solrJ(solr的客户端,就是一堆jar包)来调用solr服务端,
让solr服务端操作文档库和索引库,完成正删改查的任务,将结果返回给solrJ客户端,我们在业务系统中就可以,
获取到结果然后返回给客户在浏览器中显示.

3. solrHome:solrhome就是solr最核心的目录, 一个solrhome中可以有多个solr实例
4. solrCore:一个solrCore就是一个solr实例,solr中实例与实例之间他们的索引库和文档库是相互隔离的
每个实例对外单独的提供索引和文档的增删改查服务,默认实例叫做collection1

5. 文档和索引的增加和修改必须要有id, 主键域,没有会报错
6. 域名和类型必须先定义后使用,如果没有定义就使用会报错

7. 域的分类
普通域:string long 等
动态域:起到模糊匹配的效果,可以模糊匹配没有定义过的域名
例如:xxxx这个域名没有定义,但是xxxx_s这个域名模糊匹配了*_s这个域,所以相当于xxxx_s这个域定义了
主键域:<uniqueKey>id</uniqueKey> 一般主键域就用默认的这个就可以不需要更改或者添加
复制域: 复制域用于查询的时候从多个域中进行查询,这样可以将多个域复制到某一个统一的域中,
然后搜索的时候从这个统一的域中进行查询,就相当于从多个域中查询了.

6.是否存储和是否索引无关, 索引后就能查询,不索引就不能根据这个域搜索,
存储后就能取出来里面的内容,不存储就取不出这个域内容

7. 一般企业中将数据全部放入数据库中, 由于查询的时候需要使用like模糊查询,模糊查询数据库中使用的是全表扫描算法,
这样效率低级,所以需要使用全文检索,来优化查询速度.

solr简单学习---1的更多相关文章

  1. Solr的学习使用之(一)部署

    Solr的主要功能是全文检索,该功能分为两个过程:创建索引和对索引进行搜索 一.心得体会 第一次写技术博客,这次写的基本上都是从网络上整理的来的,外加自己的一些实践,以后争取全部原创哈,都说写技术博客 ...

  2. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  3. solr课程学习系列-solr服务器配置(2)

    本文是solr课程学习系列的第2个课程,对solr基础知识不是很了解的请查看solr课程学习系列-solr的概念与结构(1) 本文以windows的solr6服务器搭建为例. 一.solr的工作环境: ...

  4. solr简单搜索案例

    solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...

  5. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  6. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  7. Windows 下 Docker 的简单学习使用过程之一 dockertoolbox

    1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...

  8. 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习

    嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...

  9. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

随机推荐

  1. 利用Pycharm部署同步更新Django项目文件

    利用Pycharm部署同步更新Django项目文件 这里使用同步更新的前提是你已经在服务器上上传了你的Django项目文件. 在"工具(Tools)"菜单中找到"部署(D ...

  2. web开发:动画及阴影

    一.小米拼接 二.过渡动画 三.过度案例 四.盒子阴影 五.伪类设计边框 一.小米拼接 将区域整体划分起名 => 对其他区域布局不产生影响提出公共css => reset操作当有区域发送显 ...

  3. jenkins 持续集成笔记2 --- 构建 Java 项目

    先说一下流程: jenkins 从 gitlab pull 代码,使用 maven 打包,然后备份原来的jar包,使用rsync同步到服务器上,重启服务. pipeline 资源去看官方中文文档 ht ...

  4. 原生js中如果有多个onload事件解决方案

    在一个页面中有两个JavaScript 分别都用到了window.onload 一个是:window.onload=func1,另一个是:window.onload=func2 这样就造成了一个Jav ...

  5. 【bfs分层图 dp】hihocoder#1147 : 时空阵

    最短路径树上分层dp的一类套路吧 题目大意 幽香这几天学习了魔法,准备建造一个大型的时空传送阵. 幽香现在可以在幻想乡的n个地点建造一些传送门,如果她建造了从地点a与地点b之间的传送门,那么从a到b和 ...

  6. 1、docker简介:课程定位、是什么、能干什么、下载

    1.前提知识和定位 2.是什么 1.为什么会有docker出现 环境配置如此麻烦,换一台机器,就要重来一次,费力费时.很多人想到,能不能从根本上解决问题,软件可以带环境安装? 也就是说,安装的时候,把 ...

  7. css 过渡效果

    来自 https://www.w3school.com.cn/cssref/pr_transition-timing-function.asp css <!DOCTYPE html> &l ...

  8. 蓝桥历年试题 DNA对比

    [编程题](满分27分) 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子.它由4种主要的脱氧核苷酸(dAMP.dGMP.dCMT和dTMP)通过磷酸二酯键连接而成.这4种核苷酸可以分别记为 ...

  9. 两种dp模型

    两个常见模型 bzoj 4321 题意:编号为1~n的人排成一排,问有多少种排法使得任意相邻两人的编号之差不为1或-1. n<=1000 排列计数问题:考虑把数从小到大插入的过程进行dp. 设 ...

  10. Python相关分析—一个金融场景的案例实操

    哲学告诉我们:世界是一个普遍联系的有机整体,现象之间客观上存在着某种有机联系,一种现象的发展变化,必然受与之关联的其他现象发展变化的制约与影响,在统计学中,这种依存关系可以分为相关关系和回归函数关系两 ...