Solr的入门使用

这篇具有很好参考价值的文章主要介绍了Solr的入门使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化,被很多需要搜索的网站中广泛使用。

Solr基于Lucene的Java搜索引擎服务器,其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。

Solr安装

目前使用环境:

  • Java 1.8
  • Solr 8.2.0版本
  • Windows7
下载

我们可在官网下载Solr对应的版本。下载到相应位置并解压,可看到不同的文件目录。

  • bin:solr的运行脚本
  • contrib:solr的一些扩展jar包,用于增强solr的功能
  • dist:该目录包含build过程中产生的jar文件,以及相关的依赖文件
  • example:solr工程的例子目录
  • licenses:solr相关的一些许可信息
启动

进入到bin目录,打开cmd窗口,运行solr start即可启动。Solr默认端口为8983,启动成功后可在浏览器访问localhost:8983/solr,如若启动成功,可看到Solr管理界面。

solr的操作

启动  	solr start
停止  	solr stop
重启		solr restart
状态  	solr status
配置中文分词器

Solr默认没有中文分词器,作为国人需要自己安装中文分词器,我使用的是IK-Analyzer-Solr8分词器。可在如下地址下载Jar包。

将下载的Jar包放入到~\solr-8.2.0\server\solr-webapp\webapp\WEB-INF\lib目录下,并配置~\solr-8.2.0\server\solr\configsets\_default\conf\managed-schema文件,加入以下配置代码。

<dynamicField name="*_txt_ik" type="text_ik"  indexed="true"  stored="true"/>
<fieldType name="text_ik" class="solr.TextField">
	<analyzer type="index">
		<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
		<filter class="solr.LowerCaseFilterFactory"/>
	</analyzer>
	<analyzer type="query">
		<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
		<filter class="solr.LowerCaseFilterFactory"/>
	</analyzer>
</fieldType>
创建Core

在Solr中,每一个Core代表一个索引库,里面包含索引数据及其配置信息。Solr中可以拥有多个Core,也就是同进管理多个索引库、就像MySQL中可以有多个数据库一样。

Solr的bin目录下打开cmd窗口,运行solr create -c test_solrtest_solr是core名,可以自定义修改。创建成功后,会在~\solr-8.2.0\server\solr中出现相应的文件夹,里面需要注意managed-schema、solrconfig.xml两个配置文件。managed-schema定义了索引库的数据类型,同时指明某个类型的字段是不是要进行索引,是不是要进行保存到索引库里等等。solrconfig.xml则是包含了很多solr自身配置相关的参数。

这样我们就可以在Solr界面进行插入Field、插入数据、查询数据等等操作了。

Java操作Solr

引入Jar包
<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>8.2.0</version>
</dependency>
定义对象
import org.apache.solr.client.solrj.beans.Field;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Worker{

	
	@Field("workid")
	private String workid;
	
	@Field("position")
	private String position;
	
	@Field("salary")
	private double salary;
}
Java连接Solr服务器
private final static String SOLR_URL = "http://localhost:8983/solr/test_solr2";
	
HttpSolrClient solr = null;
 
@Before
public void createSolrServer() {
    solr = new HttpSolrClient.Builder(SOLR_URL)
    		.withConnectionTimeout(10000)
    		.withSocketTimeout(60000)
    		.build();
}
增删改查

1、新增\修改数据

@Test
public void addDoc() throws SolrServerException, IOException {
    SolrInputDocument document = new SolrInputDocument();
    document.addField("workid", "20190730A82");
    document.addField("position", "前端工程师");
    document.addField("salary", 8000);
    solr.add(document);
    solr.commit();
    solr.close();
    System.out.println("添加成功");
}

2、删除数据

@Test
public void deleteDocById() throws SolrServerException, IOException {
    //server.deleteById("39b070b4-c1f6-4f2b-899c-b9f8916ebecc");
	solr.deleteByQuery("id:*");
	solr.commit();
	solr.close();
}

3、查询数据

@Test
public void querySolr() throws Exception {

    SolrQuery query = new SolrQuery();

    //下面设置solr查询参数

    //query.set("q", "*:*");// 参数q  查询所有   
    //query.set("q", "position:*工程*");//模糊查询

    //参数fq, 给query增加过滤查询条件 
    //query.addFacetQuery("salary:[6000 TO 9000]");
    //query.addFilterQuery("position:数据库*"); //

    //参数df,给query设置默认搜索域,从哪个字段上查找
    query.set("df", "position"); 

    //参数sort,设置返回结果的排序规则
    query.setSort("salary",SolrQuery.ORDER.desc);

    //设置分页参数
    query.setStart(0);
    query.setRows(10);

    //设置高亮显示以及结果的样式
    query.setHighlight(true);
    query.addHighlightField("salary");  
    query.setHighlightSimplePre("<font color='red'>");  
    query.setHighlightSimplePost("</font>"); 

    //执行查询
    QueryResponse response = solr.query(query);

    //获取实体对象形式
    List<Worker> worker = response.getBeans(Worker.class);

    worker.stream().forEach(System.out::println);
    
    //获取返回结果
    SolrDocumentList resultList = response.getResults();
    
    System.out.println(FastJsonUtils.toJSONString(resultList));
}

基本查询方式

q   查询的关键字,例如,q=id:1,默认为q=*:*,
fl 	指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort
start 	返回结果的第几条记录开始,一般分页用,默认0开始
rows 	指定返回结果最多有多少条记录,默认值为 10,配合start实现分页
sort 	排序方式,例如id desc 表示按照 "id" 降序
wt(writer type)		指定输出格式,有 xml, json, php等
fq(filter query)	过虑查询,提供一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果,
		例如:q=id:1&fq=sort:[1 TO 5],找关键字id为1 的,并且sort是1到5之间的。
df 	默认的查询字段,一般默认指定。
qt(query type)	指定那个类型来处理查询请求,一般不用指定,默认是standard。
indent   返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
version  查询语法的版本,建议不使用它,由服务器指定默认值。

检索运算符

:	指定字段查指定值,如返回所有值*:*
?	表示单个任意字符的通配
*	表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
~	表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
AND、||、OR、&&  	  布尔操作符
NOT、!、-	  排除操作符不能单独与项使用构成查询 
+	存在操作符,要求符号”+”后的项必须在文档相应的域中存在
( ) 	用于构成子查询
[] 	包含范围检索,如检索某时间段记录,包含头尾,date:[201507 TO 201510]
{} 	不包含范围检索,如检索某时间段记录,不包含头尾date:{201507 TO 201510}

注意点

在进行数据插入之前,一定要提前在managed-schema中定义索引字段、索引字段类型等等参数,不然使用默认类型的时候会出现不是自己想要的类型,然后出现不可预料的问题,建议自己提前定义好再进行数据插入。如果要进行分词搜索,可把相应字段定义text_ik分词类型(根据中英文或者自定义的分词名)。文章来源地址https://www.toymoban.com/news/detail-643050.html

到了这里,关于Solr的入门使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Solr】Solr搜索引擎使用

    其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊 ! 每当你想买自己喜欢的东东时,你可能会打开某宝或者某东,像这样一搜,就能搜到很多东西,你知道你看到的这些数据都来自哪儿吗?百度一下你就知道!这些数据来自哪儿吗?等你了解完Solr后你就

    2024年02月15日
    浏览(53)
  • 【Solr】中间件-solr快速使用

    pom中添加依赖: 提供一个demo:

    2024年02月11日
    浏览(39)
  • solr 安装和使用

    Solr是基于ApacheLucene构建的流行、快速、开源的企业搜索平台 Solr具有高度可靠性、可扩展性和容错性,提供分布式索引、复制和负载平衡查询、自动故障切换和恢复、集中配置等功能。Solr为许多世界上最大的互联网站点提供搜索和导航功能 环境准备 linux centos7 java8 solr8.11.2

    2024年02月07日
    浏览(34)
  • Apache Solr 教程_编程入门自学教程_菜鸟教程-免费教程分享

    Apache Solr教程 Apache Solr - 概述 Apache Solr - 搜索引擎基础知识 Apache Solr - 在Windows环境中 Apache Solr - 在Hadoop上 Apache Solr - 架构 Apache Solr - 术语 Apache Solr - 基本命令 Apache Solr - 核心 Apache Solr - 索引数据 Apache Solr - 添加文档(XML) Apache Solr - 更新数据 Apache Solr - 删除文档 Apache Solr - 检

    2024年02月08日
    浏览(70)
  • Solr框架 03 使用SolrJ在项目中运用solr,结果和在web界面操作document一样

    01.java的springboot项目中去用solr框架,导入依赖 1新增/修改实现 2删除实现 3查询实现

    2024年02月12日
    浏览(37)
  • 【Solr】体验极速安装solr

    solr是基于java开发的,所以solr需要用到jdk环境,并且solr需要在tomcat容器中才能运行,所以需要提前配置好jdk和tomcat环境。 需要注意的是: src.tgz:带src表示是带源码文件的压缩包,无src是已经编译过的压缩包 .tgz:Linux相关操作系统使用的压缩包 .zip:Windows操作系统使用的压缩包

    2024年02月11日
    浏览(35)
  • 38、Solr Integration(2)Install Solr

    进入Solr下载页面Solr Downloads - Apache Solr 下载需要的版本,这里下载最新版9.2.1,下载完成解压zip包得到9.2.1版本的Solr目录 进入bin目录,并打开CMD 输入启动命令,端口默认为8983 在浏览器打开Solr管理界面,可以看到Solr的信息,刚启动的Solr服务里没有core需要创建一个Core 点击左

    2024年02月05日
    浏览(35)
  • 【搜索引擎Solr】Apache Solr 神经搜索

    Sease[1] 与 Alessandro Benedetti(Apache Lucene/Solr PMC 成员和提交者)和 Elia Porciani(Sease 研发软件工程师)共同为开源社区贡献了 Apache Solr 中神经搜索的第一个里程碑。 它依赖于 Apache Lucene 实现 [2] 进行 K-最近邻搜索。 特别感谢 Christine Poerschke、Cassandra Targett、Michael Gibney 和所有其他

    2024年02月15日
    浏览(42)
  • 【搜索引擎Solr】配置 Solr 以获得最佳性能

    Apache Solr 是广泛使用的搜索引擎。有几个著名的平台使用 Solr;Netflix 和 Instagram 是其中的一些名称。我们在 tajawal 的应用程序中一直使用 Solr 和 ElasticSearch。在这篇文章中,我将为您提供一些关于如何编写优化的 Schema 文件的技巧。我们不会讨论 Solr 的基础知识,我希望您了解

    2024年02月16日
    浏览(41)
  • 【搜索引擎Solr】Solr:提高批量索引的性能

    几个月前,我致力于提高“完整”索引器的性能。我觉得这种改进足以分享这个故事。完整索引器是 Box 从头开始创建搜索索引的过程,从 hbase 表中读取我们所有的文档并将文档插入到 Solr 索引中。 我们根据 id 对索引文档进行分片,同样的文档 id 也被用作 hbase 表中的 key。

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包