文章目录

  • 一、数据准备
  • 二、查询方式
    • 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

在样本数据中,包含了 jsoncsvxmlhtml 等多种格式的数据。尽管如此,官方提供的 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 来匹配同时包含 electronicsmusic 的文档。
  • 通过加上前缀 + 将多个查询条件连接起来。例如,我们可以输入 +electronics +music 实现相同的查询。

我们注意到,上述两个组合查询,都是用于查找同时存在 electronicsmusic 的文档。但如果我们的需求发生变化了呢?比如说,我们现在希望能找到存在 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 的基本查询相关推荐

  1. hadoop hive hbase 入门学习 (二)

    hadoop 自学系列                hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...

  2. JBox2d入门学习二 -----我的小鸟

    入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力.最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧.   贴代码,注解写的比较详细了, ...

  3. OpenGL入门学习[二] 绘制简单的几何图形

    OpenGL入门学习[二] 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念 ...

  4. 【入门学习二】基于 FPGA 使用 Verilog 实现蜂鸣器响动的代码及原理讲解

    目录 一.知识了解 二.模块设计 三.程序实现 四.管脚配置及结果展示 五.写给小白看的 上一篇博文:[入门学习一]基于 FPGA 使用 Verilog 实现按键点灯代码及原理讲解 功能描述:通过前面 ...

  5. Shader Forge 入门学习(二) 实现发光、火焰燃烧、溶解、扭曲效果

    引言:本篇博客主要记录ShaderForge的常用案例,包括外发光.火焰燃烧.溶解.扭曲等效果.由于内容较多会分成几篇博客记录.如果您对Shader Forge的常用操作还不熟悉,请先看 Unity3 ...

  6. solr课程学习系列-solr的概念与结构(1)

    Solr是基于Lucene的采用Java5开发的一个高性能全文搜索服务器.源于lucene,却更比Lucene更为丰富更为强大的查询语言.同时实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个 ...

  7. kivy学习二:做一个查询所在地区身份证前6位的小软件

    经过半个月的尝试,终于成功,记录下来备查! 做完之后发现有很多的问题没有解决,请大佬多批评指教! 强烈建议:学习KIVY的查看官方文档 需要用的知识: 1.字典的相关知识 2.kivy的下拉列表(Dr ...

  8. Spring 入门学习二之IOC

    今天来学习Spring ioc . 一.spring jar 包导入 在 spring 官网下载开发包 spring-framework-4.2.4.RELEASE,然后导入需要的 jar 包到项目 ...

  9. SQL入门学习(3)子查询

    目录 普通子查询: 返回一个值的普通子查询 返回一组值的普通子查询--使用ANY 返回一组值的普通子查询--使用ALL 相关子查询: 子查询分为普通子查询和相关子查询.他们执行顺序是不一样的. 普通子 ...

最新文章

  1. oc引导win方法_[OC更新]机械革命10代标压稳定版更新
  2. Transformer总结(2022版)
  3. OpenCV基本的SIMD的实例(附完整代码)
  4. unsigned a:1;
  5. C#中的is、as及转换
  6. android launcher分析和修改10,Android Launcher分析和修改10——HotSeat深入进阶
  7. STL中的next_permutation
  8. QTimer定时器的使用,判断ros是否关闭,ros关闭后关闭窗口
  9. linux程序安装包怎么用,制作Linux下程序安装包——使用脚本打包bin、run等安装包...
  10. 48条高效率的PHP优化写法
  11. 【论文解读】“推荐系统”加上“图神经网络”
  12. Python--Redis实战:第一章:初识Redis:第一节:Redis简介
  13. 使用TreeMap对要签名做排序ASCII码排序
  14. unity3D跑酷游戏源码,支持安卓+IOS双端 unity2019 C#语言开发
  15. PBR基本原理和概念以及PBR流程
  16. APP跟网址最常见的攻击和防守
  17. linux c++ 线程支持 多核应用,linux C++多线程服务端开发
  18. IntelliJ IDEA自动引入jar包
  19. 85寸左右电视怎么选 2023年85寸高性价比电视推荐榜单
  20. 提示错误Cannot read properties of null (reading ‘value‘)

热门文章

  1. Redis 更新key值导致过期时间失效问题
  2. 走进音视频的世界——Matroska封装格式的介绍(二)
  3. 小猪的爆炸以及加分的实现
  4. getElementsByTagName()获取某些元素
  5. 742-有三个人去住旅馆,住三间房,每一间房10元
  6. 自动驾驶对未来城市基础设施的重构
  7. java httpclient 模拟登录
  8. 【复习笔记】二重积分
  9. 1.解决部分网页打不开的方法
  10. Hello Akka