当前位置: 首页 > news >正文

Apache Solr9.3 快速上手

Apache Solr


简介

Solr是Apache的顶级开源项目,使用java开发 ,基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句,而且它可扩展、可配置,同时它对Lucene的性能进行了优化。

安装

  • 下载 : 下载地址
  • 解压 : tar -zxvf solr-9.3.0.tgz -C .
  • 修改solr启动参数,取消健康检查,否则启动会报警告
  • cd /opt/solr/solr-9.3.0/bin/
  • vim solr.in.sh
  • 修改内容 SOLR_ULIMIT_CHECKS=false

启动

solr不推荐使用root账户启动,这点与es也相同,当然可以直接用-force参数,强制启动

./solr start -force

如果需要修改端口,可以通过-p参数指定

./solr start -p 8089 -force

启动成功可以看到日志打印

➜  bin  ./solr start -force
Waiting up to 180 seconds to see Solr running on port 8983 [|]
Started Solr server on port 8983 (pid=3786). Happy searching!➜  bin

访问服务器ip:8983,可查看到solr管理界面

http://localhost:8983/solr/#/

image-20231008135750351

主要概念

core

在es中有索引这个概念,相当于mysql中的表(与mysql中的索引区分开来),而在solr中称之为核心 core, 所以我们可以看到页面上有一个core admin,就是用来管理核心的,个人更喜欢将其称之为索引,与es的概念形成关联记忆。
和数据库一样,solr的数据就是由一个个core组成。

doc

doc全称document, es中也有相同的概念,相当于数据库中的一行数据,一个doc也就表示的一个core中的一条数据

Schema

Schema类似于数据库中的表结构,以schema.xml的文本形式存在于conf目录下,在添加数据到索引中时,需要配置Schema。schema中包含:字段、字段类型、唯一键

分词

举个例子,我们想要搜索查询沙县小吃,那么传统的模糊查询是使用前后模糊匹配,类似 沙县小吃 ,这样的匹配模式,但如果我们的内容只有“沙县”,没有小吃时,就会导致匹配不到我们想要的信息。而分词不同,分词首先就将我们的搜索文本分割成一个个的词组,比如:沙县、小吃,然后分别匹配这些分词在哪个数据中出现的,将其匹配出来,并计算相关度得分。

倒排索引

说明了分词,我们需要继续讲解倒排索引,也叫反向索引,来帮助大家理解solr为什么能实现毫秒级的搜索体验
如下图为普通的正向索引,一句话被对应分割成了一组分词,当我们查询"china"时,会去各个文档的分词组中查询是否存在,这样的做法需要遍历每个文档,数据量较大时,明显就很慢了

image-20231008153853300

而逆向索引的处理刚好相反,以分词为存储的主键,文档ID为值,这样能直接通过分词查询出哪些文档存在该关键字,通过文档ID是顺序存储的,那么也就意味着是有压缩空间的,具体大家可以参考之前书写的关于ES的分词压缩算法,核心思想类似:浅谈倒排索引的两种压缩算法:FOR算法和RBM算法

倒排索引的存储方式,其核心优势就在于当数量特别大时,其在性能的提高和空间上的节约

image-20231008153946605

创建Core

通过管理画面http://ip:8983/solr的core Admin模块进行创建会失败,提示在新创建的core目录\conf\下找不到solrconfig.xml和managed-schema.xml,所以我们采用命令行的方式来创建Core。

PS D:\Apache\solr-9.3.0\solr-9.3.0\bin> .\solr.cmd create -c core_test1
WARNING: Using _default configset with data driven schema functionality. NOT RECOMMENDED for production use.To turn off: bin\solr config -c core_test1 -p 8983 -action set-user-property -property update.autoCreateFields -value falseCreated new core 'core_test1'
PS D:\Apache\solr-9.3.0\solr-9.3.0\bin>
  • Overview: 概览,一些核心/索引的统计信息
  • Analysis: 分词查询,如果想知道某个查询词会被分词成什么样,可在这里操作,类似es中的_analyze语句
  • DataImport: 数据同步,分为增量同步和全量同步
  • Documents: 数据新增或更新、删除,新增和更新用的都是/update,id存在则更新,不存在则新增
  • Files: 配置文件信息,也提供了上传或下载文件到solr服务的功能,可以通过此自定义查询组件
  • Ping: 用于测试与solr服务器之前的连接是否正常
  • Plugins/Stats:插件管理页面,可以查看、启用、禁用已经安装了的solr插件
  • Query:查询页面,提供在线查询solr数据的页面
  • Replication:管理solr分片配置
  • Schema:管理solr索引结构
  • Segments info:查看solr索引的段信息,了解索引大小、文档数量、字段等信息

image-20231008160446521

配置solr字段

添加字段有2种方法,可以通过web页面添加,也可以直接修改schema文件添加。

属性说明取值默认值
stored是否存储,一个字段是否被存储,取决于你是否想在solr的查询结果中得到它,也就是说你是否想在查询结果中看到它,它将会消耗cpu和io和磁盘空间等资源。true/falsetrue
indexed字段是否创建索引,索引的字段是在搜索的时候可以用它来查询或排序,在lucene中,被索引的字段将会建立倒排表。true/falsetrue
uninvertible如果为 true,则表示一个 indexed=“true” docValues=“false” 字段在查询时可以用“un-inverted”构建大内存数据结构以代替 DocValues。 出于历史原因,默认为 true,但强烈建议用户将其设置 false 以保持稳定性,并据需要使用 docValues=“true”。true/falsetrue
docValues字段的值是否放在面向列的 DocValues 结构中true/falsefalse
multiValued设置为true表示此字段可以存储多个值,意思是这个字段在一个文档中可以存储多个值的内容。true/falsefalse
required是否必须。如果为 true,则 Solr 拒绝任何添加没有此字段的文档。true/falsefalse
default字段的默认值,经常用在字段是必须的,但是有时候又无法提供的情况,solr就会用默认值替代。如: <field name="recordTime" type="date" indexed="true" stored="true" required="true" default="NOW+8HOUR"/> 标示recordTime如果没有提供,用当前的时间+8个小时作为recordTime的时间,加8小时是因为solr默认时区是0时区,按照中国北京时间(东8区)算,需要加上8个小时。

修改managed-schema
在core的conf下的managed-schema文件中增加字段配置

<!-- 自定义的字段,id已经存在不需要设置 -->
<field name="dd" type="string" indexed="true" stored="true"/>    
<field name="age" type="pint" indexed="true" stored="true" />
<field name="description" type="text_ik" indexed="true" stored="true"  />
<field name="createTime" type="pdate" indexed="true" stored="true"  />
<field name="updateTime" type="pdate" indexed="true" stored="true"  />

image-20231009120858922

添加后到“Core Admin”中刷新一下核即可

添加数据

现在core已经建好了,但是里面还没有数据,这里我们使用json添加以便快速演示(支持 JSON,、CSV、XML等格式),一般生产环境下都是从数据库访问。

准备json数据:

{"id": "11","age": 40,"name": "李白","description": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"},
{"id": "12","age": 31,"name": "杜甫","description": "唐代伟大的现实主义文学作家,唐诗思想艺术的集大成者"}

找到该core的Documents菜单,选择文档类型未JSON,把刚才准备的数据粘贴进来,确认无误提交
image-20231009121159645

查询

现在验证一下查询一下
image-20231009121159645

安装中文分词器

下载地址

将ik-analyzer-8.5.0.jar放入solr目录下

存放于 *solr-9.1.0\server\solr-webapp\webapp\WEB-INF\lib* 目录下

编辑 D:\Apache\solr-9.3.0\solr-9.3.0\server\solr\core_test1\conf\managed-schema.xml

image-20231008160151468

查询

到core的分词菜单中验证一下description字段是否按中文分词了,可以看到一件按照中文的分词习惯进行了分词。
image-20231009121531760

相关文章:

Apache Solr9.3 快速上手

Apache Solr 简介 Solr是Apache的顶级开源项目&#xff0c;使用java开发 &#xff0c;基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句&#xff0c;而且它可扩展、可配置&#xff0c;同时它对Lucene的性能进行了优化。 安装 下载 : 下载地址解压 : tar -zxv…...

按关键字搜索淘宝商品API接口获取商品销量、优惠价、商品标题等参数示例

关键词搜索商品接口的作用是提供搜索功能&#xff0c;让用户根据关键词在电商平台上搜索商品&#xff0c;并根据搜索条件和偏好获取相关的商品列表和推荐结果&#xff0c;提高用户购物体验和准确度。对于电商平台而言&#xff0c;这个接口也能帮助用户发现更多商品、提升销量和…...

【外汇天眼】价格波动的节奏感:优化止盈方法!

止盈&#xff0c;依然是一种经验&#xff0c;而不是一种技术。它涉及到价格波动的灵活应对&#xff0c;以确保我们不会错失潜在的盈利&#xff0c;同时也不会让盈利被逆市波动所侵蚀。以下是关于如何有效实施止盈策略的一些建议&#xff1a; 首先&#xff0c;我们要明确&#…...

VMvare虚拟机安装国产麒麟V10桌面操作系统

一、系统下载 进入银河麒麟官网&#xff1a;https://www.kylinos.cn/ 选择桌面操作系统&#xff0c;然后进入操作系统版本选择页面&#xff0c;选择银河麒麟桌面操作系统V10 选择后&#xff0c;进入系统介绍页面&#xff0c;然后点击申请试用 点击后进入申请页面&#xf…...

Golang--channel+waitGroup控制并发量

文章目录 channelwaitGroup控制并发量前言示例 channelwaitGroup控制并发量 前言 golang的goroutine非常轻量级&#xff0c;同时启动数万协程都没问题。如果不对并发量进行控制&#xff0c;比如同时产生数百万的协程&#xff0c;会压垮服务器通过控制channel缓冲区的大小&…...

前端【响应式图片处理】之 【picture标签】

目录 &#x1f31f;前言&#x1f31f;目前最常见的解决方案&#x1f31f;新的解决方案<picture>&#x1f31f;<picture>的工作原理&#x1f31f;<picture> 兼容性解决方案&#x1f31f;写在最后 &#x1f31f;前言 哈喽小伙伴们&#xff0c;前端开发过程中经…...

js实现链式调用,查询和处理数据

实现一个 query 方法&#xff0c;实现对数据的链式查询和处理 要求如下 query 传入参数为原始数据&#xff08;数组格式&#xff0c;每个元素都是对象&#xff09; 通过进行链式调用对数据执行操作&#xff0c;支持的方法有where(predicate): 根据参数的条件进行筛选&#xff0…...

阿里云 腾讯云 配置二级域名并解析指向非80端口操作指南

目标&#xff1a;主域名 imps.com 已完成配置&#xff0c;新增配置 kpi.imps.com 等二级域名并指向 8083 端口。 &#xff08;此操作需要主域名已经通过备案3天后&#xff0c;最好指向的IP地址网站也通过了备案申请&#xff0c;否则会提示域名没有备案。&#xff09; 操作流程…...

菜单子节点的写法

菜单子节点的写法 1.测试数据2.实现代码3.获取父ID层级 1.测试数据 1.表结构SQL CREATE TABLE test (id int DEFAULT NULL,u_id int DEFAULT NULL,p_u_id int DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci;2.数据SQL INSERT INTO test (i…...

系统架构设计:9 论软件系统架构评估及其应用

目录 一 架构评估的意义 1 性能 2 可用性 3 安全性 4 可修改性 5 易用性...

javaee SpringMVC中json的使用

jsp <%--Created by IntelliJ IDEA.User: 呆萌老师:QQ:2398779723Date: 2019/12/6Time: 15:55To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <%St…...

【系统架构】软件架构的演化和维护

导读&#xff1a;本文整理关于软件架构的演化和维护知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑&#xff0c;基于大量项目实践经验基础上&#xff0c;不断加深理论体系的理解&#xff0c;从而能够创造新解决系统相关问题。 目录 1、软件架构演化和定义 …...

一盏茶的功夫帮你彻底搞懂JavaScript异步编程从回调地狱到async/await

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 1. 引言 &#x1f4d8; 2. 使用方法 &#x1f4d8; 3. 实现原理 &#x1f4d8; 4. 写到最后…...

前后端分离计算机毕设项目之基于SpringBoot的无人智慧超市管理系统的设计与实现《内含源码+文档+部署教程》

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…...

从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位

目录 1. 纯文本输入框 2. 存在默认值的文本输入 3. 下拉选择框 4. 输入后下拉选择框 5. 文件上传 6. 时间插件 1. 纯文本输入框 driver.find_element(By.XPATH,/html/body/div[2]/td[2]/input).send_keys(测试名称) 2. 存在默认值的文本输入 注意&#xff1a; 1. 这种存…...

MyCat-web安装文档:安装Zookeeper、安装Mycat-web

安装Zookeeper A. 上传安装包 zookeeper-3.4.6.tar.gzB. 解压 #解压到当前目录&#xff0c;之后会生成一个安装后的目录 tar -zxvf zookeeper-3.4.6.tar.gz#加上-c 代表解压到指定目录 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/C. 在安装目录下&#xff0c;创建数据…...

Ajax跨域访问,访问成功但一直走error不走success的的问题解决

Ajax跨域访问,访问成功但一直走error不走success的的问题解决 通过搜索各种资料&#xff0c;终于解决啦&#xff0c;废话不多说了&#xff0c;还是老规矩直接上代码&#xff1a; 我这里用了jsonp&#xff0c;有想了解的点击 : jsonp 前端代码&#xff1a; $.ajax({type:post…...

水星 Mercury MIPC251C-4 网络摄像头 ONVIF 与 PTZ 云台控制

概况 最近在 什么值得买 上发现一款水星的网络摄像头, 除了支持云台/夜视功能之外, 还标明支持 onvif 协议. 所以想着买来接入到 HomeAssistat 作为监控使用.可到手之后发现事情并没有那么简单, 记录如下. 接入 HomeAssistant 按照 HA 的文档 ONVIF Camera 接入无非就是配置文件…...

Reactor 模式网络服务器【I/O多路复用】(C++实现)

前导&#xff1a;本文是 I/O 多路复用的升级和实践&#xff0c;如果想实现一个类似的服务器的话&#xff0c;需要事先学习 epoll 服务器的编写。 友情链接&#xff1a; 高级 I/O【Linux】 I/O 多路复用【Linux/网络】&#xff08;C实现 epoll、select 和 epoll 服务器&#x…...

2019年[海淀区赛 第2题] 阶乘

题目描述 n的阶乘定义为n!n*(n -1)* (n - 2)* ...* 1。n的双阶乘定义为n!!n*(n -2)* (n -4)* ...* 2或n!!n(n - 2)*(n - 4)* ...* 1取决于n的奇偶性&#xff0c;但是阶乘的增长速度太快了&#xff0c;所以我们现在只想知道n!和n!!末尾的的个数 输入格式 一个正整数n &#xff…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...