Solr入门学习(二)—— Solr 的基本查询
文章目录
- 一、数据准备
- 二、查询方式
- 1. Solr 管理界面查询
- 2. URL 查询
- 三、查询参数
- 四、运算符
- 五、查询示例
- 1. 关键词查询
- 2. 字段查询
- 3. 词组查询
- 4. 组合查询
- 六、更多查询
- 参考文章
Server : Ubuntu 16.04
Java Version : 1.8
Solr Version : 7.4.0
一、数据准备
Solr 刚刚安装后,是没有任何数据的,所以此时我们无法进行任何查询。幸运的是,官方为用户提供了索引工具以及样本数据,方便新手快速建立索引。
首先,我们先看一下索引工具和样本数据分别位于哪个位置。
- 索引工具:
/{solr_home}/bin/post
- 样本数据:
/{solr_home}/example/exampledocs
在样本数据中,包含了 json
、csv
、xml
、html
等多种格式的数据。尽管如此,官方提供的 post
工具只需一个命令即可为上述多种格式的数据建立索引:
./post -c techproducts ../example/exampledocs/*
成功运行命令,我们看到以下信息输出:
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/testCollection/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file books.csv (text/csv) to [base]
POSTing file books.json (application/json) to [base]/json/docs
POSTing file gb18030-example.xml (application/xml) to [base]
POSTing file hd.xml (application/xml) to [base]
POSTing file ipod_other.xml (application/xml) to [base]
POSTing file ipod_video.xml (application/xml) to [base]
POSTing file manufacturers.xml (application/xml) to [base]
POSTing file mem.xml (application/xml) to [base]
POSTing file money.xml (application/xml) to [base]
POSTing file monitor2.xml (application/xml) to [base]
POSTing file monitor.xml (application/xml) to [base]
POSTing file more_books.jsonl (application/json) to [base]/json/docs
POSTing file mp500.xml (application/xml) to [base]
POSTing file post.jar (application/octet-stream) to [base]/extract
POSTing file sample.html (text/html) to [base]/extract
POSTing file sd500.xml (application/xml) to [base]
POSTing file solr-word.pdf (application/pdf) to [base]/extract
POSTing file solr.xml (application/xml) to [base]
POSTing file test_utf8.sh (application/octet-stream) to [base]/extract
POSTing file utf8-example.xml (application/xml) to [base]
POSTing file vidcard.xml (application/xml) to [base]
21 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/testCollection/update...
Time spent: 0:00:06.133
可以发现,已经有 21 份文档存储到 Solr 当中,现在,我们可以使用 Solr 查询数据了。
二、查询方式
Solr 提供多种数据查询方式,这里仅介绍两种。
1. Solr 管理界面查询
Solr 启动后,我们可以通过 http://localhost:8983/solr
访问 Solr 的管理页面,如下图所示:
进行查询前,我们首先要选择集合。选中集合后,点击集合下的 Query
选项卡:
此时,页面上会弹出如下图所示的查询窗口。点击 Execute Query
按钮,即可在页面右侧看到 Solr 返回的数据。默认情况下,Solr 会以 JSON
格式返回 10 条记录。
2. URL 查询
实际上,Solr 管理页面是通过 URL 的方式请求数据的。例如上例的查询,转成相应的 URL 就是 http://localhost:8983/solr/testCollection/select?q=*:*
。
在这个 URL 中,testCollection
表示集合名,select
表示查询动作,参数 q
表示查询条件。其中,参数 q
最为关键,它决定了哪些数据可以返回给用户。
现在,我们在浏览器地址栏中输入这个 URL,即可得到 json
格式的数据。
三、查询参数
除了上述提到的查询条件 q
,Solr 还有其他查询参数,具体见下表:
参数名 | 描述 |
---|---|
q | 查询条件,必填项 |
start | 结果集第一条记录的偏移位置,用于分页,默认为 0 |
rows | 返回文档的记录数,用于分页,默认为 10 |
sort | 排序 |
fl | 指定返回字段,多个字段用逗号或空格分隔,默认返回所有字段 |
wt | 指定输出格式,例如xml、json等 |
fq | 过滤查询。该参数可将查询的结果限定在某一范围,由于 Solr 会对过滤查询进行缓存,因此它可以显著提升复杂查询的效率 |
hl | 用于设置字段的高亮显示 |
四、运算符
与 SQL 相似,Solr 查询语句中也包含运算符,具体见下表:
运算符 | 说明 |
---|---|
: | 指定字段目标值,等同于 SQL 中的 “=” 号 |
? | 通配符,替代任意单个字符 |
* | 通配符,替代任意多个字符 |
AND | 表示且,等同于 “&&” |
OR | 表示或,等同于 “||” |
NOT | 表示否 |
() | 用于构成子查询 |
[] | 范围查询,包含头尾 |
{} | 范围查询,不包含头尾 |
+ | 存在运算符,表示文档中必须存在 “+” 号后的项 |
- | 不存在运算符,表示文档中不包含 “-” 号后的项 |
五、查询示例
1. 关键词查询
如果我们想在 Solr 中查询包含某个关键词 foundation
的文档,可以直接在管理界面的 q
参数输入框中输入该关键词,然后点击 Execute Query
按钮。此时,我们可以在页面上看到如下结果:
如果想使用 url 方式完成相同的查询,只需将默认的 q=*:*
替换成 q=foundation
即可。完整的 URL 为:http://localhost:8983/solr/testCollection/select?q=*:*
。
2. 字段查询
有时候,我们想通过某个字段的值来查询文档,正如我们当初使用 SQL 语句 select * from table where field = 'xxx'
查询数据库记录一样。此时,我们只需要将 q
参数默认的 *:*
改为 字段名:字段值
即可。
例如,我们现在在管理界面 q
参数输入框中输入 cat:electronics
,可以看到如下结果:
如果使用 url 完成此查询,只需在浏览器输入完整的 URL : http://localhost:8983/solr/testCollection/select?q=cat:electronics
。
3. 词组查询
有时候,我们不仅想依赖于某个单词来查询文档,而是想通过词组(单词间有空格)来完成查询工作。如果此时我们想使用管理界面完成该查询,首先要使用双引号将词组包含起来,然后再输入到输入框中。
例如,我们输入词组 "CAS latency"
,得到如下结果:
另一方面,如果我们想使用 url 完成相同的查询,就需要对空格进行处理。一般来说,有两种处理方式:
- 对空格进行编码,即把 转换为
%20
,相应的 URL 为:http://localhost:8983/solr/testCollection/select?q="CAS%20latency"
- 把空格替换为
+
号,对应的 URL 为:http://localhost:8983/solr/testCollection/select?q="CAS+latency"
4. 组合查询
假如我们希望得到同时匹配多个关键词的文档,这时候,我们该怎么做?Solr 的组合查询可以满足我们的需求。这里介绍两种实现组合查询的方法:
- 使用运算符
AND
将多个查询条件连接起来。例如,我们通过输入electronics AND music
来匹配同时包含electronics
和music
的文档。 - 通过加上前缀
+
将多个查询条件连接起来。例如,我们可以输入+electronics +music
实现相同的查询。
我们注意到,上述两个组合查询,都是用于查找同时存在 electronics
和 music
的文档。但如果我们的需求发生变化了呢?比如说,我们现在希望能找到存在 electronics
但是不存在 music
的文档,那么,我们该怎么做?
同样地,有两种方式:
- 使用运算符
NOT
排除关键词。例如,我们通过输入electronics NOT music
来匹配包含electronics
但是不包含music
的文档。 - 利用前缀
-
排除关键词。例如,我们可以输入+electronics -music
达到同样的目的。
这里需要注意的一点是,如果我们要用 url 的方式来实现组合查询,那么在使用 +
号的时候必须对其进行编码。正如我们在词组查询中提到的,+
号在 url 中表示空格的含义,因此需要使用其对应的编码 %2B
来让 url 识别 +
号本身的运算逻辑。
六、更多查询
除了上面的基本查询,Solr 还有更多的查询示例。这里我们仅作简单展示,不予深入说明。
- 指定返回字段
id
http://localhost:8983/solr/testCollection/select?q=${keyword}&fl=id
- 分页查询
http://localhost:8983/solr/testCollection/select?q=${keyword}&start=0&row=100
- 根据字段
id
排序
http://localhost:8983/solr/testCollection/select?q=${keyword}&sort=id+asc
- 指定返回格式为
XML
http://localhost:8983/solr/testCollection/select?q=${keyword}&wt=xml
- 返回某一时间范围内的数据
http://localhost:8983/solr/testCollection/select?q=time:%5B20180903+TO+20180904%5D
参考文章
CommonQueryParameters - Solr Wiki
Solr 学习(5) —- Solr查询语法和参数 - 奔跑的面包 - ITeye博客
Solr入门学习(二)—— Solr 的基本查询相关推荐
- hadoop hive hbase 入门学习 (二)
hadoop 自学系列 hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...
- JBox2d入门学习二 -----我的小鸟
入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力.最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧. 贴代码,注解写的比较详细了, ...
- OpenGL入门学习[二] 绘制简单的几何图形
OpenGL入门学习[二] 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念 ...
- 【入门学习二】基于 FPGA 使用 Verilog 实现蜂鸣器响动的代码及原理讲解
目录 一.知识了解 二.模块设计 三.程序实现 四.管脚配置及结果展示 五.写给小白看的 上一篇博文:[入门学习一]基于 FPGA 使用 Verilog 实现按键点灯代码及原理讲解 功能描述:通过前面 ...
- Shader Forge 入门学习(二) 实现发光、火焰燃烧、溶解、扭曲效果
引言:本篇博客主要记录ShaderForge的常用案例,包括外发光.火焰燃烧.溶解.扭曲等效果.由于内容较多会分成几篇博客记录.如果您对Shader Forge的常用操作还不熟悉,请先看 Unity3 ...
- solr课程学习系列-solr的概念与结构(1)
Solr是基于Lucene的采用Java5开发的一个高性能全文搜索服务器.源于lucene,却更比Lucene更为丰富更为强大的查询语言.同时实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个 ...
- kivy学习二:做一个查询所在地区身份证前6位的小软件
经过半个月的尝试,终于成功,记录下来备查! 做完之后发现有很多的问题没有解决,请大佬多批评指教! 强烈建议:学习KIVY的查看官方文档 需要用的知识: 1.字典的相关知识 2.kivy的下拉列表(Dr ...
- Spring 入门学习二之IOC
今天来学习Spring ioc . 一.spring jar 包导入 在 spring 官网下载开发包 spring-framework-4.2.4.RELEASE,然后导入需要的 jar 包到项目 ...
- SQL入门学习(3)子查询
目录 普通子查询: 返回一个值的普通子查询 返回一组值的普通子查询--使用ANY 返回一组值的普通子查询--使用ALL 相关子查询: 子查询分为普通子查询和相关子查询.他们执行顺序是不一样的. 普通子 ...
最新文章
- oc引导win方法_[OC更新]机械革命10代标压稳定版更新
- Transformer总结(2022版)
- OpenCV基本的SIMD的实例(附完整代码)
- unsigned a:1;
- C#中的is、as及转换
- android launcher分析和修改10,Android Launcher分析和修改10——HotSeat深入进阶
- STL中的next_permutation
- QTimer定时器的使用,判断ros是否关闭,ros关闭后关闭窗口
- linux程序安装包怎么用,制作Linux下程序安装包——使用脚本打包bin、run等安装包...
- 48条高效率的PHP优化写法
- 【论文解读】“推荐系统”加上“图神经网络”
- Python--Redis实战:第一章:初识Redis:第一节:Redis简介
- 使用TreeMap对要签名做排序ASCII码排序
- unity3D跑酷游戏源码,支持安卓+IOS双端 unity2019 C#语言开发
- PBR基本原理和概念以及PBR流程
- APP跟网址最常见的攻击和防守
- linux c++ 线程支持 多核应用,linux C++多线程服务端开发
- IntelliJ IDEA自动引入jar包
- 85寸左右电视怎么选 2023年85寸高性价比电视推荐榜单
- 提示错误Cannot read properties of null (reading ‘value‘)