SSM+solr 通过商品搜索学习solr的简单使用

 

学习了一下https://github.com/TyCoding/ssm-redis-solr这个github上的solr搜索功能,现在来记录一下。

我的理解就是solr有点类似于数据库,但它是有索引的数据库,按很多字段建立索引,可能是b+树或者散列索引,然后就能够实现海量数据的查找。solr通过导入jar包就可以对这个库就行增删改查了,后端逃不掉的增删改查。。。

 1.配置tomcat

具体我就不说了,因为我是直接用了github上配置好的,毕竟站在巨人的肩膀上学习嘛

地址:https://github.com/TyCoding/solr-tomcat

2.访问solr并使用

访问端口:localhost:8080/solr/index.html

这里的new_core就是项目中配置的路径,就将商品的索引放在这里。

然后用Test测试它的使用,测试的时候要引入配置文件,不然会导致空指针错误,我居然现在才知道。怪不得以前只要用Autowired的时候就会空指针错误。。,而且还要@Runwith注解,引入包import org.springframework.test.context.junit4.*;eclipse点击不会有import提示,需要自己加上去。

 

 这里新建了一个实体对象,然后把这个实体对象加入到索引库里,在solr索引库里面就可以找到这个字段

在new_core的schema里面就以Id建好了索引

以及很多的信息

@Testpublic void testFindById() {Goods goods = solrTemplate.getById(1, Goods.class);System.out.println("--------" + goods.getTitle());}

通过id查找,控制台会输出你刚刚插入的数据,也就是通过solrTemplate找到了你的数据。

@Testpublic void testAddList() {List<Goods> list = new ArrayList<Goods>();//循环插入100条数据for (int i = 0; i < 100; i++) {BigDecimal price=new BigDecimal (2.3);Goods goods = new Goods(i + 1L, "华为Mate" + i,price, "手机", "手机", "华为专卖店");list.add(goods);}solrTemplate.saveBeans(list); //添加集合对象,调用saveBeans();添加普通对象类型数据,使用saveBean();solrTemplate.commit(); //提交}

还可以批量插入数据,或者分页查询

@Testpublic void testPageQuery() {Query query = new SimpleQuery("*:*");query.setOffset(20); //开始索引(默认0)query.setRows(20); //每页记录数(默认10)ScoredPage<Goods> page = solrTemplate.queryForPage(query, Goods.class);System.out.println("总记录数:" + page.getTotalElements());List<Goods> list = page.getContent();}

3.学习一下项目中怎么配置

注意要在web.xml加一个过滤,不然注入不了solrTemplate这个bean

 

spring-solr.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:solr="http://www.springframework.org/schema/data/solr"xsi:schemaLocation="http://www.springframework.org/schema/data/solrhttp://www.springframework.org/schema/data/solr/spring-solr-1.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- solr服务器地址 --><solr:solr-server id="solrServer" url="http://127.0.0.1:8080/solr/new_core"/><!-- solr模板,使用solr模板可对索引库进行CRUD的操作 --><bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate"><constructor-arg ref="solrServer"/></bean></beans>

就是加载一个solr的模板

 

SolrUtil.java

把数据库的数据库批量加入

@Component
public class SolrUtil {@Autowiredprivate GoodsMapper goodsMapper;@Autowiredprivate SolrTemplate solrTemplate;/*** 实现将数据库中的数据批量导入到Solr索引库中*/public void importGoodsData() {List<Goods> list = goodsMapper.findAll();System.out.println("====商品列表====");for (Goods goods : list) {System.out.println(goods.getTitle());}solrTemplate.saveBeans(list);solrTemplate.commit(); //提交System.out.println("====结束====");}public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring*.xml");SolrUtil solrUtil = (SolrUtil) context.getBean("solrUtil");solrUtil.importGoodsData();}
}

 

 这样就把数据加入索引库中。

实体类有一个Field标识这个实体字段在索引库里的名称

 @Fieldprivate Long id; //商品ID@Field("item_title")private String title; //商品标题@Field("item_price")private BigDecimal price; //商品价格@Field("item_image")private String image; //商品图片@Field("item_category")private String category; //商品类别@Field("item_brand")private String brand; //商品品牌@Field("item_seller")private String seller; //商品卖家

最后,搜索功能的实现

按价格查找

 //按价格区间查询if (searchMap.get("price") != null) {if (!searchMap.get("price").equals("")) {String[] price = ((String) searchMap.get("price")).split("-");if (!price[0].equals("0")) {//如果起点区间不等于0Criteria filterCriteria = new Criteria("item_price").greaterThanEqual(price[0]);FilterQuery filterQuery = new SimpleFilterQuery(filterCriteria);query.addFilterQuery(filterQuery);}if (!price[1].equals("*")) {//如果区间重点不等于*Criteria filterCriteria = new Criteria("item_price").lessThanEqual(price[1]);FilterQuery filterQuery = new SimpleFilterQuery(filterCriteria);query.addFilterQuery(filterQuery);}}}

 4.实现效果

 

转载于:https://www.cnblogs.com/HannahLihui/p/10104416.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可以使用中文作为变量名_次氯酸可以作为伤口消毒使用吗?

次氯酸可以作为伤口消毒使用吗&#xff1f;次氯酸在经过2020年的洗礼&#xff0c;已然成为常态化&#xff0c;它对于人体是否有害&#xff0c;也是人们关注的焦点。对于那些还不太了解次氯酸的群体做一下简短科普。什么是次氯酸&#xff1f;次氯酸&#xff08;HCIO&#xff09;…

tomcat启动java项目_Java web项目启动Tomcat报错解决方案

点击运行项目时显示 A Java Exception has occurred.Starting Tomcat v9.0 Server at localhost has oncountered a problem.Server Tomcat v9.0 Server at localhost failed tostart.并显示以下两个弹框同时控制台报错org.apache.catalina.startup.Bootstraporg.apache.catali…

Spark2.3(三十五)Spark Structured Streaming源代码剖析(从CSDN和Github中看到别人分析的源代码的文章值得收藏)...

从CSDN中读取到关于spark structured streaming源代码分析不错的几篇文章 spark源码分析--事件总线LiveListenerBus spark事件总线的核心是LiveListenerBus&#xff0c;其内部维护了多个AsyncEventQueue队列用于存储和分发SparkListenerEvent事件。 spark事件总线整体思想是生产…

matlab 从 excel读取 日期_MATLAB批量修改文件名和选择性复制/剪切文件

今天解决的问题&#xff1a;1、如何利用MATLAB批量修改文件名&#xff1f;(前面写过一次bat命令法&#xff0c;这个应该也算一次改进&#xff0c;程序的初衷是想将Smartsolo导出的文件名批量修改为以炮点桩号为文件名)2、如何利用MATLAB选择性批量复制/剪切文件&#xff1f;(程…

CODE[VS] 1860 最大数 1998年NOIP全国联赛提高组

题目描述 Description设有n个正整数&#xff08;n≤20&#xff09;&#xff0c;将它们联接成一排&#xff0c;组成一个最大的多位整数。 输入描述 Input Description第一行一个正整数n。 第二行n个正整数&#xff0c;空格隔开。 输出描述 Output Description连接成的多位数。…

java map 输入 查询 修改_map的查询和修改方法

packagecom.cn.util;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;//循环遍历map的方法public classUtil {public static voidmain(String[] args) {Map tempMap new HashMap(…

您基于JEE的Web项目的结构是什么?

在本文中&#xff0c;我将主要与JSF讨论基于Web的项目的各种组织结构。 开始新项目时&#xff0c;首先想到的是如何组织Java包&#xff1f; 想象一下&#xff0c;您开发了一个基于Web的用户和组管理系统。 很长时间以来&#xff0c;我使用以下Java包结构来将Bean类与模型类分开…

自定义scoll样式

使用伪类自定义scroll样式 效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0,maximum-scale1.0,minimum1.0,…

关于常用的编码工具如何引入jar包

myeclipse和eclipse&#xff08;差不多&#xff09;引入jar包&#xff1a; 普通项目&#xff1a; 1.对准你的项目创建一个文件夹名字尽量命名成lib&#xff08;注意要和src平级&#xff0c;不要在src下创建文件夹&#xff09;。 2.将下载好的依赖放到lib文件夹下&#xff0c; 3…

win10商店打不开_win10自带的照片查看器打不开的修复方法

我们知道win10或win7等系统都自带有默认的照片查看器&#xff0c;安装好系统后&#xff0c;我们再不用安装第三方看图软件来查看照片了&#xff0c;给我们玩电脑带来了极大的方便。但有些朋友近来向我求教照片查看器打不开&#xff0c;或打开很慢不正常的问题。下面我来跟大家介…

HBase相关概念简介

1.Configuration描述 HBase采用hadoop中的Configuration对象来加载配置文件信息 2.HMaster作用 a.监控集群中所有的regionserver b.对元数据进行管理 c.通常情况下&#xff0c;HMaster和NameNode在一个节点上 d.管理regionserver的故障转移和region分区 表级操作&#xff1a;Ta…

mysql 包 过程 job_mysql job实例全过程

查看event是否开启 show variables like %sche%; 将事件计划开启 set global event_scheduler 1; 创建存储过程test CREATE DEFINERroot% PROCEDURE e_test() BEGIN -- 变量声明 DECLARE S_date INT(11); DECLARE S_hour INT(11); DECLARE S_min …

休眠事实:访存策略的重要性

在使用ORM工具时&#xff0c;每个人都承认数据库设计和实体到表映射的重要性。 这些方面引起了很多关注&#xff0c;而诸如获取策略之类的事情可能只是推迟了。 我认为&#xff0c;不应将实体获取策略与实体映射设计分开&#xff0c;因为除非经过适当设计&#xff0c;否则它可…

自定义checkbox样式

通过选中时添加背景图片自定义CheckBox样式 效果&#xff1a; CSS样式&#xff1a; <style type"text/css>label {width: 10%;display: flex;display: -webkit-flex;display: -moz-flex;flex-direction: row;justify-content: center;align-items: center;}label i…

安装步骤

1、安装node&#xff0c;安装全局webpack&#xff0c;npm init 生成package.json文件全局打包命令webpack b.js -o bundle.js旧版本的是webpack b.js bundle.js2、npm install webpack --save-dev 引入本项目webpack&#xff0c;package.json文件中会生成对应的webpack版本号…

fpu测试_I510400性能及温度测试详解

5月20号&#xff0c;INTEL将正式销售十代民用桌面级处理器&#xff0c;此次上市的型号相对9代与8代来说要多了很多型号&#xff0c;仅I9系列就有4个型号&#xff0c;下图有此次INTEL更新所有型号的参数&#xff1a;从上图参数可知&#xff0c;Intel有史以来I3~I9全部支持超线程…

java multiline_Java 7 - Multiline strings

问题Ive read that multiline string literals were proposed to be added in Java 7.Although I cant find any documentation saying definitely that they have been. Id like to know if they are, because this is something Id consider switching versions for.回答1:Mu…

洛谷P1876开灯

题目描述 有n盏灯&#xff0c;一开始全是关闭的。来n个人&#xff0c; 第一个人把一的倍数的灯开着的关上&#xff0c;关上的打开。 第二个人把二的倍数的灯开着的关上&#xff0c;关上的打开。 第三个人把三的倍数的灯开着的关上&#xff0c;关上的打开。 ........ 问最后第几…

HMTL label标签

label标签和特定表单控件关联之后&#xff0c;如果用户在 label 元素内点击文本&#xff0c;就会触发关联的表单控件。就是说&#xff0c;当用户选择该label标签时&#xff0c;浏览器就会自动将焦点转到和label标签相关的表单控件上。 label标签常用于与checkbox或radio关联&a…

ADFLogger的SLF4J绑定–缺少的部分

由于最好的原因&#xff0c;在我的日常工作中&#xff0c;我希望为ADF Logger Oracle ADF提供一个SLF4J适配器。 毫不奇怪&#xff0c;slf4j没有用于ADFLogger的适配器&#xff0c;但是由于ADFLogger只是Java Util Logging的轻巧包装&#xff0c;因此花了一个多小时来填补这一空…