Solr的使用 — 检索

Solr的使用 — 检索,第1张

本文是延续 Solr的使用 系列,前一篇文章已经讲了 Solr 的部署和数据推送,这里主要以示例方式讲述 Solr 的常见查询语法,同时介绍如何使用 PHP 语言的客户端 solarium 同 Solr 集群进行数据交互。

想要详细地了解 Solr 查询语法,可参考 官方wiki 。

用于示例的数据,我已经推送到了 Solr , 见这里 。数据 Core 为 rooms,数据格式形如:

通过向 Solr 集群 GET 请求 /solr/core-name/selectquery 形式的查询 API 完成查询,其中 core-name 为查询的 Core 名称。查询语句 query 由以下基本元素项组成,按使用频率先后排序:

wt 设置结果集格式,支持 json、xml、csv、php、ruby、pthyon,序列化的结果集,常使用 json 格式。

fl 指定返回的字段,多指使用“空格”和“,”号分割,但只支持设置了 stored=true 的字段。 表示返回全部字段,一般情况不需要返回文档的全部字段。

字段别名 :使用 displayName:fieldName 形式指定字段的别名,例如:

函数 :fl 还支持使用 Solr 内置函数 ,例如根据单价算总价:

fq 过滤查询条件,可充分利用 cache,所以可以利用 fq 提高检索性能。

sort 指定结果集的排序规则,格式为 <fieldName>+<sort> ,支持 asc 和 desc 两种排序规则。例如按照价格倒序排列:

也可以多字段排序,价格和面积排序:

查询字符串 q 由以下元素项组成,字段条件形如 fieldName:value 格式:

以上元素项的默认值由 solrconfigxml 配置文件定义。通常查询时设置 q=: ,然后通过 fq 过滤条件来完成查询,通过缓存提高查询性能。

Solr 的模糊查询使用占位符来描述查询规则,如下:

查询小区名称中包含“嘉”的房源信息

Solr 的模糊查询为:

单精确值查询是最简单的查询,类似于 SQL 中 = *** 作符。查询小区 id 为 1111027377528 的房源信息:

Solr 中查询为:

多精确值查询是单精确值查询的扩展,格式为 (value1 value2 ) ,功能类似于 SQL 的 IN *** 作符。查询小区 id 为 1111027377528 或者 1111047349969 的房源信息:

Solr 中查询为:

范围查询是查询指定范围的值(数字和时间),格式为 [value1 TO value2] ,类似于 SQL 的 BETWEEN *** 作符。查询价格在 [2000, 3000] 的房源信息:

Solr 中范围查询为:

几个特殊的范围查询:

将基本查询结合布尔查询,就可以实现大部分复杂的检索场景。布尔查询支持以下几种布尔 *** 作:

查询北京市价格区间在 [2000, 3000] 或者上海市价格区间在 [1500, 2000] 的房源信息:

转换为逻辑与布尔查询:

在实际中分组查询比较常见,当然 Solr 也支持分组查询。分组查询语句由以下基本元素项组成(常用部分):

查询西二旗内价格最便宜小区的房源信息:

Group 分组查询为:

结果为:

在大多数情况下,Group 分组已经能满足我们的需求,但是如果待分组字段为多值,Group 分组已经无能为力了,这时使用 Facet 就能轻松解决。

Solr 的 Facet 语句由以下基本元素构成(常用):

例如,统计每个商圈的房源分布情况并倒序排列,由于 bizcircleCode 字段为多值,Facet 查询为:

结果如下:

Solr 的 geofilt 过滤器可以实现 LBS 检索,但要在 schemaxml 配置中将需检索字段的字段类型设置为 solrLatLonType 类型。geofilt 过滤器参数列表如下:

示例中的 location 字段,值为 “40074203,116315445”,类型配置为:

则检索坐标点 40074203,116315445 附近 2 公里的房源信息:

Solr 提供一些函数以实现逻辑或数学运算。其中常用 数学运算 函数列表如下:

常用的 逻辑运算 函数:

这些函数可以使用在返回值或者查询条件上。例如返回每个房源的每平方米价格信息:

PHP 可以使用 solarium 客户端,实现 Solr 数据源的检索,详细使用说明 见这里 。

solarium 客户端需要配置 Solr 的基本信息。如下:

solarium 提供的查询方法较丰富,整理后如下表所示:

查询北京市的所有房源信息,如下:

solarium 提供的分组查询方法如下表所示(常用):

获取西二旗每个小区的房源分布信息,如下:

solarium 提供的 Facet 查询方法,如下表(常用):

获取北京市每个商圈的房源分布信息,如下:

到这里,Solr 系列就整理完毕了,未涉及的部分后续接触时再补充。这两天利用休息时间充电,自己在 Solr 方面的技能也算是上了一个台阶了。

假设MySQL数据库有关数据库、表、字段定义等工作已经提前完成。这里介绍我这个测试用例所用的数据库情况:数据库和表名均为crawler,用户名root,密码admin。这里就不把sql语句列出来了,反正是测试。另外,因为Solr的解压路径以及Solr_HOME的路径每个人都是不一样的,所以以后关于Solr_HOME的路径,我都用$SOLR_HOME表示。

使用DataImportHandler导入并索引数据

配置$SOLR_HOME\collection1\conf\solrconfigxml

在<requestHandler name="/select" class="solrSearchHandler">前面上加上一个dataimport的处理的Handler,如图示:

其中,data-configxml文件用于定义solr和MySQL的映射关系,这里使用的而是相对路径,即跟solrconfigxml处于同一目录。因此要在$SOLR_HOME\collection1\conf目录下创建data-configxml文件

通过data-configxml完成Solr与MySQL数据库的映射,data-configxml文件内容如图所示:

修改schemaxml文件,因为这个文件是我们从压缩包中复制过来的,里面包括很多多余的数据,在这里我们只需要在该文件中定义与MySQL数据库表中相关的Field,去掉不相关的Field即可,但需要注意,有些Field还是需要保留的,如:_version_和text 这两个field要保留,其他的Field、CopyField删除即可:如图示。

上图中,我id的定义为int型,Solr中索引的主键默认是只支持type="string"字符串类型的。解决方法:修改同目录下的elevatexml,注释掉下面2行。

将mysql-connector-java-5126-binjar和solr-4103\dist\solr-dataimporthandler-4103jar复制到 D:\Solr\solr-4103\example\solr-webapp\webapp\WEB-INF\lib中。

开启tomcat进入Solr的Admin UI界面,在Core Selector中选择collection1,选择dataImport子菜单,如图所示。

完成设置后,点击Execute执行。

1、将解压包中的solr-471/dist/solr-471war复制到tomcat_dir/webapps/目录,并命名为solrwar。

2、将solr-471/example/lib/ext/目录下的jar文件复制到tomcat/lib目录下,将solr-471/example/resources/下的log4jproperties文件复制到tomcat_dir/lib目录下;

切把 solr-471/example/solr,复制到tomcat_dir/bin下。

3、修改tomcat_dir/conf/serverxml

<Connector port="8080" protocol=">

Solr 是一个可供企业使用的 基于 Lucene 的开箱即用的搜索服务器 对Lucene不熟?那么建议先看看下面两篇文档

实战Lucene 第 部分 初识 Lucene lo lucene /

用Lucene加速Web搜索应用程序的开发 lucene /

一 solr介绍

solr是基于Lucene Java搜索库的企业级全文搜索引擎 目前是apache的一个项目 它的官方网址在 solr需要运行在一个servlet 容器里 例如tomcat solr在lucene的上层提供了一个基于>

以下资料整理自网络,以及查看solr帮助文档。主要分为两部分,第一部分是对《db-data-configxml》的配置内容的讲解(属于高级内容),第二部分是DataImportHandler(属于基础),第三部分是对db-data-configxml的进阶

第一部分是对《db-data-configxml》

query是获取全部数据的SQL

deltaImportQuery是获取增量数据时使用的SQL

deltaQuery是获取pk的SQL

parentDeltaQuery是获取父Entity的pk的SQL

Full

Import工作原理:

执行本Entity的Query,获取所有数据;

针对每个行数据Row,获取pk,组装子Entity的Query;

执行子Entity的Query,获取子Entity的数据。

Delta

Import工作原理:

查找子Entity,直到没有为止;

执行Entity的deltaQuery,获取变化数据的pk;

合并子Entity

parentDeltaQuery得到的pk;

针对每一个pk

Row,组装父Entity的parentDeltaQuery;

执行parentDeltaQuery,获取父Entity的pk;

执行deltaImportQuery,获取自身的数据;

如果没有deltaImportQuery,就组装Query

限制:

子Entity的query必须引用父Entity的pk

子Entity的parentDeltaQuery必须引用自己的pk

子Entity的parentDeltaQuery必须返回父Entity的pk

deltaImportQuery引用的必须是自己的pk

第二部分是DataImportHandler

关于DataImportHandler的具体使用方法,详见下文,如果你英文超级好,那看这个链接吧:>

以上就是关于Solr的使用 — 检索全部的内容,包括:Solr的使用 — 检索、如何建立基于商品库的solr检索、solr怎么多表联合查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/9321723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存