solr搭建电商搜索引擎06 - 数据查询和搜索关键词匹配

1 solr数据查询

在solr管理页面选择core后点击“Query”进入网页查询页面,可以直接点击“Execute Query”查找所以文档,或者根据搜索需要定义各个参数。
在这里插入图片描述
查询表单各个参数的含义:

参数 含义
qt 搜索使用的请求处理器,这里选择默认
q 主查询关键词,*:*表示查找所有文档,这里指定关键词“直线滚珠”
fq 过滤查询关键词,需要同时指定字段和关键词,这里过滤品牌为“THK”的商品
sort 搜索结果排序字段和方法,asc和desc分别对应升序和降序,这里按照价格进行升序排列
start, rows 返回结果的起始序号和数量,这里返回TOP5
fl 搜索结果返回的字段,可以在solrconfig中指定默认值
df 默认的搜索字段,可以在solrconfig中指定默认值
wt 返回结果的输出类型,可选json,xml,csv等

2 solr搜索关键词匹配

2.1 字段匹配

我们可以利用df参数指定搜索字段,也可以直接使用搜索词【product_name:直线轴承】(不包括【】,下同)来指定:
在这里插入图片描述
也可以通过多个字段和搜索词,实现fq的功能:
在这里插入图片描述

2.2 精确匹配

当我们在solr中对字段product_name搜索【直线轴承】的时候,实际上solr首先根据product_name的域类型对“直线轴承”进行了分词“直线/轴承”,然后传给q的值实际上是【直线 轴承】。可以看到下面结果中既有“直线轴承”也有“直线导轨”和“轴承”,实际上是对“直线”和“轴承”的搜索结果取了并集A∪B,或者理解成【直线 OR 轴承】:
在这里插入图片描述
如果我们不希望solr对“直线轴承”进行分词,可以用双引号将关键词进行处理【“直线轴承”】,这样得到的就是包含“直线轴承”这个词组的精确匹配结果:
在这里插入图片描述
如果在引号外添加字符邻近距离【“直线轴承”~1000】,相当于允许允许引号内分词但是距离要满足要求,当距离足够大时相当于【直线 AND 轴承】,但使用这种方法的好处是不需要再对“直线轴承”做处理。

2.3 逻辑匹配

搜索【直线 轴承】得到的是【直线】和【轴承】两个结果的并集,同样的,我们使用【直线 OR 轴承】也可以得到同样的结果:
在这里插入图片描述
如果我们希望搜索结果同时匹配“直线”和“轴承”,可以使用【直线 AND 轴承】,即对“直线”和“轴承”的搜索结果取交集A∩B:
在这里插入图片描述
除了“OR”和“AND”之外,还可以使用“NOT”构建搜索词【直线 AND 轴承 NOT 密封】,排除结果中包含“密封”的结果:
在这里插入图片描述
一元运算符“+”和“-”在很多情况下可以等价于“AND”和“NOT”
【直线 AND 轴承】=【+直线 +轴承】
【直线 NOT 轴承】=【+直线 -轴承】

2.4 邻近匹配

使用【“直线轴承”】可以得到包含短语“直线轴承”的结果,使用【直线 AND 轴承】可以得到同时包含“直线”和“轴承”的结果,如果我们需要限定“直线”和“轴承”两个词之间的距离如“直线**轴承”的结果,则可以使用邻近匹配。比如我们使用【“直线轴承”~2】,可以得到包含“直线轴承”和“直线导套轴承”的结果:
在这里插入图片描述

最后为了说明几种匹配方式的效果,分别做一下测试:

查询内容 搜索结果数
series_name:直线 OR 轴承 OR 标准 1699
series_name:直线轴承标准 1699
series_name:直线 AND 轴承 AND 标准 31
series_name:“直线轴承标准”~1000 31
series_name:“直线轴承标准” 21