Solr的配置和在java中的使用
Solr是一个全局站内搜索引擎,可以快速的搜索出结果。
Solr依赖于tomcat,把Solr的war包放到tomcat中即可运行。
使用solr,需要在solr的schema.xml中配置solr与java的映射关系,便于存放数据,在schema.xml中配置如下关系。
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType> <field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" /> <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>
Solr与Spring的集成
添加支持solr客户端的依赖
<!-- solr客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>
在Spring中配置Solr的bean
<bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
<constructor-arg name="baseURL" value="http://47.95.196.183:8080/solr/"></constructor-arg>
</bean>
向solr中添加数据,先从数据库中查询出所有有用信息,然后放到solr中
//导入solrServer对象
@Autowired
private SolrServer solrServer; //查询商品列表
List<SolrItem> list = itemMapper.getItemList();
//向索引库中添加文档
for (SolrItem solrItem : list) {
//创建文档对象
SolrInputDocument document = new SolrInputDocument();
document.setField("id", solrItem.getId());
document.setField("item_title", solrItem.getTitle());
document.setField("item_sell_point", solrItem.getSell_point());
document.setField("item_price", solrItem.getPrice());
document.setField("item_image", solrItem.getImage());
document.setField("item_category_name", solrItem.getItem_cat_name());
document.setField("item_desc", solrItem.getItem_desc());
//向索引库中添加文档
solrServer.add(document);
}
//提交修改
solrServer.commit();
这样,数据就全部添加到Solr中了。
从Solr中查询数据
@Autowired
private SolrServer solrServer;//导入solrServer对象 //创建查询对象
SolrQuery solrQuery = new SolrQuery();
//设置查询条件
//solrQuery.set("q","");
solrQuery.setQuery(queryString);
//设置分页
solrQuery.setStart((int) ((page - 1) * pageSize));
solrQuery.setRows(pageSize.intValue());
//高亮设置
solrQuery.setHighlight(true);
//设置高亮显示的域
solrQuery.addHighlightField("item_title");
//高亮显示的前缀
solrQuery.setHighlightSimplePre("<span style='color:red'>");
//高亮显示的后缀
solrQuery.setHighlightSimplePost("</span>");
//设置默认搜区域
solrQuery.set("df", "item_keywords"); //根据查询条件查询索引库
QueryResponse response = solrServer.query(solrQuery);
//从response中取查询结果
SolrDocumentList list = response.getResults();
//查询结果list
List<SolrItem> itemList = new ArrayList<>();
//遍历查询结果
for (SolrDocument solrDocument : list) {
//创建一商品对象
SolrItem item = new SolrItem();
item.setId(Long.parseLong((String)solrDocument.get("id")));
//取高亮显示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> hList = highlighting.get(solrDocument.get("id")).get("item_title");
String title = "";
//判断是否有高亮信息
if (hList != null && hList.size() > 0) {
title = hList.get(0);
} else {
title = (String) solrDocument.get("item_title");
}
item.setTitle(title);
item.setSell_point((String) solrDocument.get("item_sell_point"));
item.setPrice((long) solrDocument.get("item_price"));
item.setImage((String) solrDocument.get("item_image"));
//添加到商品列表
itemList.add(item);
}
最后,将查询的结果放入到itemList中返回。
- 报错信息:在solr中提示没有item_title字段,后发现是在第一步中配置的映射关系没有生效,仔细检查发现是在创建classes文件夹的时候写成了calsses导致配置没有生效。。重新配置生效即可添加数据并调用接口。
Solr的配置和在java中的使用的更多相关文章
- java中eclipse的安装和JDK的环境变量的配置以及记事本的使用
2020-04-09 23:26:15 学习java的第一步当然就是环境配置了,java中的配置作为小白刚刚开始肯定会有点一点晕头转向的,开没等开始入门呢!就要准备放弃了.哈哈哈哈,没关系的,都是这么 ...
- 真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql数据库、IK中文分词器配置以及web项目中solr的应用(1)
版权声明:本文为博主原创文章,转载请注明本文地址.http://www.cnblogs.com/o0Iris0o/p/5813856.html 内容介绍: 真分布式SolrCloud+Zookeepe ...
- 在IntelliJ IDEA 13中配置OpenCV的Java开发环境
准备工作: 下载IDEA 13(这里以版本13为例,后面简称IDEA): 下载Java JDK(用于配置基本的Java开发环境): 下载OpenCV 2.4.9(这里以版本2.4.9为例,据这篇文章说 ...
- java中path和CLASSPATH的配置和意义解析
原文链接 https://blog.csdn.net/eclipse_yin/article/details/51447169 一.JDK的安装和基本配置 JDK的安装: 1) 如果想要获得JDK,那 ...
- Spring装配bean(在java中进行显式配置)
1.简单介绍 Spring提供了三种装配机制: 1.在XML中进行显式配置: 2.在java中进行显式配置: 3.隐式的bean发现机制和自动装配. 其中,1和3项在项目中经常使用,而在java中进行 ...
- java中常量文件的配置与读取
java中常量文件的配置与读取: package com.floor.shop.user.util; import java.io.InputStream; import java.io.InputS ...
- Java中多环境Logback配置与ELK日志发送
Java中多环境Logback配置与ELK日志发送 一.项目基于SpringBoot实现,引入SpringBoot相关库后,本文还要讲上传到ELK的Logstash,所以需要在pom.xml中加入 ...
- Java中的 JDK下载和环境配置(方式一)
第一步:需要安装JDK. JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151 ...
- Java中classpath配置
Java中classpath配置 一.DOS常用命令 二.DOS常用命令实例 2.1 转换目录 cd 1.6* 2.2 删除文件 del 删除文件(windows删除从里往外删) del *.txt ...
随机推荐
- win10 右下角显示秒
点击Contana搜索框,输入“regedit”打开注册表编辑器: 查找:HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Exp ...
- DirectX11--实现一个3D魔方(3)
前言 (2019/1/9 09:23)上一章我们主要讲述了魔方的旋转,这个旋转真是有毒啊,搞完这个部分搭键鼠操作不到半天应该就可以搭完了吧... (2019/1/9 21:25)啊,真香 有人发这张图 ...
- js循环内0.5s停止
var time_begin = new Date().getTime(); while(true){ if(new Date().getTime()-time_begin > 500) bre ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)
A. Find a Number 找到一个树,可以被d整除,且数字和为s 记忆化搜索 static class S{ int mod,s; String str; public S(int mod, ...
- 利用LI标签仿照a中Link进行页面跳转?
点击LI时仿照A标签进行页面跳转html: <ul> <li link="/school/schooldetail/success_detail?case_id=<! ...
- kettle 分组
kettle 分组组可以实现group_concat的效果
- phpinfo
phpinfo是一个运行指令,为显示php服务器的配置信息. phpinfo函数是PHP最为常用的配置输出函数.phpinfo函数能够输出服务器PHP当前状态的大量信息,其中包含了PHP的编译选 ...
- Spring 基于注解的AOP实现
在本文开始之前,我要引入一张图,这张图的来源 https://blog.csdn.net/chenyao1994/article/details/79708496 ,版权归原作者所有,我借鉴了原作者的 ...
- Timeline高级扩展
转载于http://forum.china.unity3d.com/thread-32200-1-1.html通过demo讲解了timeline更加复杂的使用方式 Timeline是创建过场动画和影片 ...
- 执行大SQL脚本方法
当我们需要在SQLServer数据库里面执行一个大的文件时,会发现数据库根本无法打开该脚本文件,原因是因为查询分析器只能执行100M以内的文件,所以脚本过大就会造成内存溢出.此时我们可以使用osql工 ...