Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >solr搭建和搜索功能实现

solr搭建和搜索功能实现

作者头像
周杰伦本人
发布于 2023-10-12 06:14:06
发布于 2023-10-12 06:14:06
30900
代码可运行
举报
文章被收录于专栏:同步文章同步文章
运行总次数:0
代码可运行

前言: solr与Lucene的区别 :Lucene是api 需要写代码开发 ,solr是服务器,是一套基于lucence开发的全文检索框架,用就完事了。

1.1. Solr的环境

Solr是java开发。

需要安装jdk。

安装环境Linux

需要安装Tomcat。

1.2. 搭建步骤

第一步:把solr 的压缩包上传到Linux系统

第二步:解压solr。

第三步:安装Tomcat,解压缩即可。

第四步:把solr部署到Tomcat下。

第五步:解压缩war包。启动Tomcat解压。

第六步:把/root/solr-4.10.3/example/lib/ext目录下的所有的jar包,添加到solr工程中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ext]# pwd

/root/solr-4.10.3/example/lib/ext

[root@localhost ext]# cp */usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/

第七步:创建一个solrhome。/example/solr目录就是一个solrhome。复制此目录到/usr/local/solr/solrhome

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost example]# pwd

/root/solr-4.10.3/example

[root@localhost example]# cp -r solr/usr/local/solr/solrhome

[root@localhost example]# 

第八步:关联solr及solrhome。需要修改solr工程的web.xml文件。

第九步:启动Tomcat

http://192.168.25.154:8080/solr/

和windows下的配置完全一样。

solr客户端的一些基本操作: 清空索引:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<delete>
<query>*:*</query>
</delete>

1.3. 配置业务域

创建对应的业务域。需要制定中文分析器。

创建步骤:

第一步:把中文分析器添加到工程中。

1、把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下 D:\software\apache-tomcat-7.0.86ForSolr\webapps\solr\WEB-INF\lib

2、把扩展词典、配置文件放到solr工程的WEB-INF/classes目录下。

第二步:配置一个FieldType,制定使用IKAnalyzer E:\software\apache-tomcat-7.0.47ForSolr\solrhome\collection1\conf 修改schema.xml文件

修改Solr的schema.xml文件,添加FieldType:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

第三步:配置业务域,type制定使用自定义的FieldType。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--使用ik分词器-->
<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" />

<!--三个业务域复制到item_keywords中 方便搜索-->
<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"/>

设置业务系统Field

第四步:重启tomcat

1.1.1. solrJ添加索引库

1、把solrJ的jar包添加到工程。

2、创建一个SolrServer对象。创建一个和sorl服务的连接。HttpSolrServer。

3、创建一个文档对象。SolrInputDocument。

4、向文档对象中添加域。必须有一个id域。而且文档中使用的域必须在schema.xml中定义。

5、把文档添加到索引库

6、Commit。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.e3mall.solrj;

import java.util.List;
import java.util.Map;

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.apache.solr.common.SolrInputDocument;
import org.junit.Test;

public class TestSolrJ {
	/**
	 *  添加文档
	 * <p>Title: addDocument</p>
	 * <p>Description: </p>
	 * @throws Exception
	 */
	@Test
	public void addDocument() throws Exception {
		//创建一个SolrServer对象 创建连接 参数solr服务的url
		SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
		//创建文档对象SolrInputDocument
		SolrInputDocument document =new SolrInputDocument();
		//向文档对象添加域, 文档中必须包含一个id域 所有的域的名称在schema.xml中定义
		document.addField("id", "doc01");
		document.addField("item_title", "测试商品01");
		document.addField("item_price", 1000);
		//吧文档写入索引库
		solrServer.add(document);
		//提交
		solrServer.commit();
	}
	
	/**
	 * 删除文档
	 * <p>Title: deleteDocument</p>
	 * <p>Description: </p>
	 * @throws Exception
	 */
	@Test
	public void deleteDocument() throws Exception{
		SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
		//删除文档
//		solrServer.deleteById("doc01");
		//根据id删除
		solrServer.deleteByQuery("id:doc01");
		solrServer.commit();
	}
	/**
	 * 简答查询测试
	 * <p>Title: queryIndex</p>
	 * <p>Description: </p>
	 * @throws Exception 
	 */
	@Test
	public void queryIndex() throws Exception {
		SolrServer solrServer =new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
		SolrQuery solrQuery = new SolrQuery();
		//设置执行查询
		solrQuery.setQuery("*:*");
		//执行查询
		QueryResponse queryResponse = solrServer.query(solrQuery);
		SolrDocumentList solrDocumentList = queryResponse.getResults();
		System.out.println("查询结果总记录数:"+solrDocumentList.getNumFound());
		for (SolrDocument solrDocument : solrDocumentList) {
			System.out.println(solrDocument.get("id"));
			System.out.println(solrDocument.get("item_title"));
			System.out.println(solrDocument.get("item_sell_point"));
			System.out.println(solrDocument.get("item_price"));
			System.out.println(solrDocument.get("item_image"));
			System.out.println(solrDocument.get("item_category_name"));
		}
	}
	
	/**
	 * 复杂搜索
	 * @throws Exception 
	 */
	@Test
	public void queryIndexComplex() throws Exception {
		SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
		SolrQuery solrQuery = new SolrQuery();
		solrQuery.setQuery("手机");
		solrQuery.setStart(0);//从第几条开始
		solrQuery.setRows(20);//条数
		solrQuery.set("df", "item_title");
		solrQuery.setHighlight(true);
		//设置高亮域
		solrQuery.addHighlightField("item_title");
		solrQuery.setHighlightSimplePre("<em>");
		solrQuery.setHighlightSimplePost("</em>");
		QueryResponse queryResponse = solrServer.query(solrQuery);
		SolrDocumentList solrDocumentList = queryResponse.getResults();
		System.out.println(solrDocumentList.getNumFound());
		Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
		for (SolrDocument solrDocument : solrDocumentList) {
			System.out.println(solrDocument.get("id"));
			//取高亮显示
			List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
			String title="";
			if (list!=null&&list.size()>0) {
				title=list.get(0);
			}else {
				title=(String) solrDocument.get("item_title");
			}
			//有高亮内容取高亮 没有取原来标题
			System.out.println(title);
			System.out.println(solrDocument.get("item_sell_point"));
			System.out.println(solrDocument.get("item_price"));
			System.out.println(solrDocument.get("item_image"));
			System.out.println(solrDocument.get("item_category_name"));
		}
	}
}

商品索引导入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 将商品数据导入索引库
 * <p>Title: SearchItemServiceImpl</p>
 * <p>Description: </p>
 * <p>Company: www.itcast.cn</p> 
 * @version 1.0
 */
@Service
public class SearchItemServiceImpl implements SearchItemService {

	@Autowired
	private ItemMapper itemMapper;
	@Autowired
	private SolrServer solrServer;
	
	@Override
	public E3Result importItmes() {
		try {
			//查询商品列表
			List<SearchItem> itemList = itemMapper.getItemList();
			//导入索引库
			for (SearchItem searchItem : itemList) {
				//创建文档对象
				SolrInputDocument document = new SolrInputDocument();
				//向文档中添加域
				document.addField("id", searchItem.getId());
				document.addField("item_title", searchItem.getTitle());
				document.addField("item_sell_point", searchItem.getSell_point());
				document.addField("item_price", searchItem.getPrice());
				document.addField("item_image", searchItem.getImage());
				document.addField("item_category_name", searchItem.getCategory_name());
				//写入索引库
				solrServer.add(document);
			}
			//提交
			solrServer.commit();
			//返回成功
			return E3Result.ok();
			
		} catch (Exception e) {
			e.printStackTrace();
			return E3Result.build(500, "商品导入失败");
		}
	}
	
}
1.1.1. SolrServer的配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
		<constructor-arg index="0" value="http://192.168.25.154:8080/solr"/>
	</bean>

</beans>

1.1. 解决Mapper映射文件不存在异常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
	<build>
		<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
	</build>

1. 搜索功能实现

跟据查询条件查询索引库,返回对应的结果。

dao层:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.e3mall.search.dao;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import cn.e3mall.common.pojo.SearchItem;
import cn.e3mall.common.pojo.SearchResult;

/**
 * 商品搜索Dao
 * <p>Title: SearchDao</p>
 * <p>Description: </p>
 * <p>Company: www.itcast.cn</p> 
 * @version 1.0
 */
@Repository
public class SearchDao {
	
	@Autowired
	private SolrServer solrServer;
	
	public SearchResult search(SolrQuery solrQuery) throws Exception {
		QueryResponse queryResponse = solrServer.query(solrQuery);
		SolrDocumentList solrDocumentList = queryResponse.getResults();
		long numFound = solrDocumentList.getNumFound();
		SearchResult searchResult = new SearchResult();
		searchResult.setRecordCount(numFound);
		//取商品列表 高亮显示
		Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
		List<SearchItem> itemList = new ArrayList<>();
		for (SolrDocument solrDocument : solrDocumentList) {
			SearchItem searchItem = new SearchItem();
			searchItem.setId((String)solrDocument.get("id"));
			searchItem.setCategory_name((String) solrDocument.get("item_category_name"));
			searchItem.setImage((String) solrDocument.get("item_image"));
			searchItem.setPrice((long) solrDocument.get("item_price"));
			searchItem.setSell_point((String) solrDocument.get("item_sell_point"));
			List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
			String title="";
			if (list!=null && list.size()>0) {
				title=list.get(0);
			}else {
				title=(String) solrDocument.get("item_title");
			}
			searchItem.setTitle(title);
			itemList.add(searchItem);
		}
		searchResult.setItemList(itemList);
		return searchResult;
	}
	
}

service层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.e3mall.search.service.impl;

import org.apache.solr.client.solrj.SolrQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.e3mall.common.pojo.SearchResult;
import cn.e3mall.search.dao.SearchDao;
import cn.e3mall.search.service.SearchService;
@Service
public class SearchServiceImpl implements SearchService {
	@Autowired
	private SearchDao searchDao;
	
	@Override
	public SearchResult search(String keyword, int page, int rows) throws Exception {
		SolrQuery solrQuery = new SolrQuery();
		solrQuery.setQuery(keyword);
		if (page<=0) {
			page=1;
		}
		solrQuery.setStart((page-1)*rows);//从第几条开始
		solrQuery.setRows(rows);//条数
		//设置默认搜索域
		solrQuery.set("df", "item_title");
		solrQuery.setHighlight(true);
		solrQuery.addHighlightField("item_title");
		solrQuery.setHighlightSimplePre("<em style=\"color:red\">");
		solrQuery.setHighlightSimplePost("</em>");
		//调用dao执行查询
		SearchResult searchResult = searchDao.search(solrQuery);
		long recordCount = searchResult.getRecordCount();
		int totalPage = (int)(recordCount/rows);
		//不足一页
		if (recordCount%rows>0) {
			totalPage++;
		}
		searchResult.setTotalPages(totalPage);
		return searchResult;
	}

}

service发布服务 表现层引用服务 在e3-search-web中添加接口依赖

表现层:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.e3mall.search.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import cn.e3mall.common.pojo.SearchResult;
import cn.e3mall.search.service.SearchService;

/**
 * 商品搜索
 * <p>Title: SearchController</p>
 * <p>Description: </p>
 * <p>Company: www.itcast.cn</p> 
 * @version 1.0
 */
@Controller
public class SearchController {

	@Autowired 
	private SearchService searchService;
	@Value("${SEARCH_RESULT_ROWS}")
	private Integer SEARCH_RESULT_ROWS;
	
	@RequestMapping("/search")
	public String searchItemList(String keyword,
			@RequestParam(defaultValue="1")Integer page,Model model) throws Exception{
		//中文乱码问题
		keyword = new String(keyword.getBytes("iso-8859-1"),"utf-8");
		SearchResult searchResult = searchService.search(keyword, page, SEARCH_RESULT_ROWS);
		
		model.addAttribute("query", keyword);
		model.addAttribute("totalPages", searchResult.getTotalPages());
		model.addAttribute("page", page);
		model.addAttribute("recourdCount", searchResult.getRecordCount());
		model.addAttribute("itemList", searchResult.getItemList());
		//异常测试
//		int a =1/0;
		return "search";
	}
	
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
day73_淘淘商城项目_06_solr索引库搭建 + solr搜索功能实现 + 图片显示等问题解决_匠心笔记
  solr是java开发的。   solr的安装文件。   推荐在Linux环境下使用Solr,需要安装环境Linux。   需要安装jdk。参考链接:https://www.cnblogs.com/chenmingjun/p/9931593.html   需要安装tomcat。
黑泽君
2018/12/14
1.9K0
day73_淘淘商城项目_06_solr索引库搭建 + solr搜索功能实现 + 图片显示等问题解决_匠心笔记
使用SolrJ(即java客户端)开发Solr。
1、什么是SolrJ呢?   答:Solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务。开始配置schema.xml,/home/hadoop/soft/solr-4.10.3/example/solr/collection1/conf。添加IK中文分析器,然后定义定义自己的业务域。
别先生
2019/09/29
1.5K0
使用SolrJ(即java客户端)开发Solr。
solr 一些前缀例如:q、fq、df 的用法
 具体的用法在代码中有注释,这边就不在累述了。 public class SolrjTest {          //添加,修改     @Test     public void test1() throws IOException, SolrServerException {           //和solr服务器创建连接,参数为solr服务器地址         SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:80
凯哥Java
2022/12/16
8150
SolrJ的使用
package com.shi.solrj; import java.util.List; import java.util.Map; import org.apache.solr.client.
用户5927264
2019/08/01
4610
SolrJ的使用
SolrCloud搭建和使用
SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。
周杰伦本人
2023/10/12
4680
SolrCloud搭建和使用
04_solr7.3之solrJ7.3的使用
SolrJ is an API that makes it easy for Java applications to talk to Solr. SolrJ hides a lot of the details of connecting to Solr and allows your application to interact with Solr with simple high-level methods.
全栈程序员站长
2022/07/05
5300
04_solr7.3之solrJ7.3的使用
Solr单机版的安装与使用
1 1、使用Solr实现。 2 基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。 3 4 2、什么是Solr。 5 Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、 6 搜索性能进行了优化。 7 Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档, 8 Solr根据xml文档添加、删除、更新索引 。Solr搜索只需要发送 HTTP GET 请求,然后对 Solr返回Xml、json等格式的查询结果进行解析,组织页面布局。 9 Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。 10 11 3、Solr与Lucene的区别。 12 Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的 13 工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。 14 Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜 15 索功能。
别先生
2019/09/29
1.3K0
Solr单机版的安装与使用
Solr集成Tomcat
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
全栈程序员站长
2022/06/29
1.3K0
Solr集成Tomcat
Web-第二十九天 Lucene&solr使用二【悟空教程】
Solrj和图形界面操作的区别就类似于数据库中使用jdbc和mysql客户端的区别一样。
Java帮帮
2018/08/06
8650
Web-第二十九天 Lucene&solr使用二【悟空教程】
Solr_全文检索引擎系统
Solr介绍: Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。 Solr的作用: solr是一个现成的全文检索引擎系统, 放入tomcat下可以独立运行, 对外通过http协议提供全文检索服务(就是对索引和文档的增删改查服务), 在代码中可以通过solrJ(solr的客户端的jar包)来调用solr服务。 Lucene和solr的区别: lucene是一个全文检索引擎工具包, 就是
赵小忠
2018/01/24
1.1K0
使用SolrJ客户端管理SolrCloud(Solr集群)
注意:集群中使用的配置文件是zookeeper统一管理的配置文件。如果修改了schema.xml配置文件,使用zkCli.sh脚本命令重新上传conf目录即可,将配置文件进行覆盖。
别先生
2019/09/29
1.3K0
使用SolrJ客户端管理SolrCloud(Solr集群)
了解Solr
采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
HUC思梦
2020/09/03
1.5K0
了解Solr
day66_Solr学习笔记
目录结构详解如下:   bin:solr的运行脚本。   contrib:solr的一些扩展jar包,用于增强solr的功能。   dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。   docs:solr的API文档。   example:solr工程的例子目录: example/solr:      该目录是一个标准的SolrHome目录,它包含一个默认的SolrCore目录collection1。 SolrHome目录:
黑泽君
2018/12/05
1.2K0
day66_Solr学习笔记
Lucene&Solr框架之第三篇
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
海仔
2019/10/22
1.6K0
Solr技术(附软件分享)
Solr 版本:solr-4.10.3.tgz.tgz SolrLinux下的软件安装包以及中文分词器见末尾百度云1
时间静止不是简史
2020/07/27
1.4K0
Solr技术(附软件分享)
Apache solr(一).
概念:Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。Apache Solr 中存储的资源是以 Document 为对象进行存储的。每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性。Solr 中的每个 Document 需要有能唯一标识其自身的属性,默认情况下这个属性的名字是 id,在 Schema 配置文件中使用:<uniqueKey>id</uniqueKey>进行描述。       
JMCui
2018/03/16
1.7K0
Apache solr(一).
solr_架构案例【京东站内搜索】(附程序源代码)
注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的。 一:solr服务的端口号、我这里的sol
赵小忠
2018/01/24
1.3K0
solr系列--solrj使用
solrj是solr的java客户端,用于访问solr索引库。它提供了添加、删除、查询、优化等功能。 配置jar: /dist/solrj-lib下的所有jar solr-solrj-5.2.1.jar server/lib/ext下所有jar 如果Maven来构建项目,添加以下代码到你的pom.xml配置文件中 <dependency>          <artifactId>solr-solrj</artifactId>          <groupId>org.apache.solr</groupId>          <version>1.4.0</version>          <type>jar</type>         <scope>compile</scope>  </dependency> <dependency>          <groupId>org.slf4j</groupId>         <artifactId>slf4j-simple</artifactId>         <version>1.5.6</version>  </dependency> @Test public void createIndex() throws Exception { // 创建HttpSolrClient // 参数:表示solr服务的访问基础URL HttpSolrClient server = new HttpSolrClient("http://localhost:8080/solr"); // 通过server添加SolrInputDocument SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "c001"); doc.addField("content_ik", "我爱传智播客22222"); server.add(doc); // 提交操作 server.commit(); } @Test public void deleteIndex() throws Exception { // 创建HttpSolrClient // 参数:表示solr服务的访问基础URL HttpSolrClient server = new HttpSolrClient("http://localhost:8080/solr"); // 通过id删除 // server.deleteById("c001"); // 根据查询条件删除 server.deleteByQuery("id:c001"); // 批量删除 server.deleteByQuery("*:*"); // 提交操作 server.commit(); } @Test public void search01() throws Exception { // 创建HttpSolrClient // 参数:表示solr服务的访问基础URL HttpSolrClient server = new HttpSolrClient("http://localhost:8080/solr"); // 创建查询对象 SolrQuery query = new SolrQuery(); // 设置查询条件 query.setQuery("*:*"); // 通过server查询,并返回结果 QueryResponse response = server.query(query); // 获取查询结果 SolrDocumentList results = response.getResults(); // 匹配出的所有商品记录 long count = results.getNumFound(); System.out.println("匹配出的所有商品记录:" + count); for (SolrDocument solrDocument : results) { System.out.println("商品ID:" + solrDocument.get("id")); System.out.println("商品名称:" + solrDocument.get("product_name")); System.out.println("商品分类名称:" + solrDocument.get("product_catalog_name")); System.out.println("商品价格:" + solrDocument.get("product_price")); Syste
Dlimeng
2023/06/29
1660
消息队列之ActiveMQ
分布式中 service之间相互调用的时候 存在耦合 比如这边添加完商品后做同步索引库处理,添加商品就是在数据库中插入一条数据,而同步索引库这个功能一般写在solr的service层里,这时候就会有出现服务间的耦合 因此我们需要一个中间商来赚差价。。 是需要一个中间件来传递信息。
周杰伦本人
2023/10/12
2940
Solr示例
Lucene是apache软件基金会提供的一款开源全文检索引擎。Solr是在lucene基础上封装得更易于使用的全文检索服务器并提供了相关api。
星哥玩云
2022/07/01
9050
相关推荐
day73_淘淘商城项目_06_solr索引库搭建 + solr搜索功能实现 + 图片显示等问题解决_匠心笔记
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验