Solr查询处理简介

本文介绍了Solr的查询表单详解,包括HTTP GET请求的参数;深入讨论了Solr的搜索返回机制,强调了排名检索的重要性;详细阐述了如何进行分页和排序,以及如何利用boost值改变搜索结果的排序;最后提到了Solr的拓展搜索功能,如高级查询选项。

一、Solr的查询表单详解

mark

Solr管理控制台的查询表单

所有与solr核心服务有关的交互,如查询处理,都是通过HTTP请求执行的。填写查询表单之后,创建一个HTTP Get请求并发送给Solr。
mark

Solr查询表单的所有参数

查询参数概览表:

参数取值描述
defType/select选择用来处理查询的查询分析器。
q(query)iPod主查询参数。根据该参数中的词项与文档的相似度,对文档评分
fq(filter query)manu:Belkin过滤查询;通过过滤器筛选结果集文档,但不影响评分。在此例中,我们将制造商字段manu限定在Belkin,对结果进行筛选
sortprice asc指定排序字段与排序方式。根据响应的分数或另一个指定的特性对查询的响应进行正序或倒序排序。 在此例中我们希望按照价格从低到高升序排列文档。
start0指定搜索结果的起始页。(默认0)。
rows10页面大小。控制一次返回多少条数据(默认10)
fl(field)name,price,features,score在结果集中每个文档返回的字段列表。score字段是内置字段,用于保存每个文档的查询相关度得分。必须显式地请求score字段,它才会返回。
df(default)text未指定搜索字段的任意查询词项的默认搜索字段;text是示例服务器的全包含(catch-all)字段
wt(writer)xml响应输出类型,控制响应输出的格式。

查询表单的http get请求分解:

http://127.0.0.1:8983/solr/collection1/select?q=iPod&
fq=manu%3ABelkin&
sort=price+asc&
start=0&
rows=10&
fl=name%2Cprice%2Cfeatures%2Cscore&
df=text&
wt=xml&
indent=true

注意:HTTP GET请求的参数间不包括换行,这里的换行只是为了更加容易理解。

查询表单不是为最终用户设计的,而是solr为开发者和管理员提供的一个查询提交途径。使用solr应用程序,需要为用户开发搜索界面。

二、Solr的搜索返回机制

前面介绍了Solr的查询请求提交,现在了解一下solr的搜索返回机制。本小节的核心是Solr返回的查询匹配的文档集,还包括为达到优质搜索体验solr客户端需要处理的其他信息。搜索体验优化由solr客户端负责。solr返回原始的搜索结果数据,并提供核心的搜索功能,要为用户提供优质的搜索体验,则需要根据这些结果和功能进行自主设计与开发。
以下为示例结果查询所返回的搜索结果。搜索结果是XML格式,按照价格从低到高排序。每一个文档均包含iPod关键字。因为只有两个搜索结果,所以没有分页。

<?xml version="1.0" encoding="UTF-8"?>
<response>

<!-- 响应的头部元素包含该查询的状态信息,例如,执行时间(Qtime)以及返回相应的查询参数。 -->
<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">1</int>
  <lst name="params">
    <str name="q">iPod</str>
    <str name="df">text</str>
    <str name="indent">true</str>
    <str name="fl">name,price,features,score</str>
    <str name="start">0</str>
    <str name="fq">manu:Belkin</str>
    <str name="sort">price asc</str>
    <str name="rows">10</str>
    <str name="wt">xml</str>
    <str name="_">1527330711756</str>
  </lst>
</lst>

<!-- 主响应元素包括找到的文档总数(numFound)以及最佳文档的相关度得分(score),即最大得分(maxScore)。-->
<result name="response" numFound="2" start="0" maxScore="1.3334373">
<!-- 与查询因素匹配的文档,即“命中文档”,每个文档的显示字段由fl参数控制。 -->
  <doc>
    <str name="name">iPod & iPod Mini USB 2.0 Cable</str>
    <arr name="features">
      <str>car power adapter for iPod, white</str>
    </arr>
    <float name="price">11.5</float>
    <float name="score">1.3334373</float></doc>
  <doc>
    <str name="name">Belkin Mobile Power Cord for iPod w/ Dock</str>
    <arr name="features">
      <str>car power adapter, white</str>
    </arr>
    <float name="price">19.95</float>
    <float name="score">0.7698604</float></doc>
</result>
</response>

solr支持许多中格式的返回结果,如 json、csv,以及针对主流语言的特定格式。

三、排名检索

Solr的查询处理与关系型数据库或其他NoSQL数据存储最大的不同就在于排名检索:根据文档与查询的相关性进行排序,最相关的文档将处于列表最前端。

  1. 在文本搜索框中输入iPod,在fl字段中填入name、features、与socre三个字段,执行查询。
    **结果:**返回三个文档,根据得分降序排列。
    **分析:**iPod关键字在在第一个文档中出现了3次,在name字段中出现了两次,在features中出现了一次。它仅在其他文档中出现了一次。在score字段的得分数值并非具有绝对意义,它在Lucene内部仅用作相对排名,而且同一文档在不同查询中的得分并无关系。也就是说,与查询匹配的文档相关度得分仅适用于该查询。返回的搜索结果按照得分由高到低排序,文档得分越高,说明该查询越相关。

  2. 把查询语句修改为iPod power,执行查询。
    **结果:**返回与之前查询结果相同的三个文档,并且排序也相同。
    **分析:**因为这三个文档在name 或 features 字段中包含了查询词项。但是,排在前两个文档的得分更加接近,它们在第二个查询中的得分为 1.521和 1.398,在第一个查询中的得分为1.333和0.770。这是因为power字段在第二个文档中出现了两次,所以,第二个文档与iPod power的相关性高于与iPod的相关性。

  3. 把查询语句修改为“iPod power^2”,这里给power 赋予boost 值2,这里给power赋予boost值2,而iPod的boost值扔为1,执行查询。
    **结果:**返回3个文档,但是排序发生了变化。因为在这个查询语句中power的重要性是iPod的两倍,而文档Belkin Mobile Power Cord for iPod w/ Dock中name和features两个字段包含了power,所以它成为了第一条搜索结果。
    **分析:**在以上的查询中power的重要性是iPod的两倍,所以排序发生了变化。

四、分页和排序

分页

使用分页可以返回搜索结果的小部分子集,同时使用导航工具来请求更多页面。
Slor中默认的页面大小为10,可以在查询请求中通过行参数来调整页面大小。要在搜索结果中请求下一页,只需在页面大小中增量调整start参数。

排序

搜索的结果默认根据相关度得分将文档按降序(从高到低)排列。Solr还可以根据文档中的其他字段来进行排序。
排序和分页结合起来使用是因为排序决定了搜索结果在页面中的位置。如果文档的得分情况相同,那么Solr会以索引的次序来对文档进行排序。该次序基于Lucene的内部文档ID。这个文档ID大致等于被索引文档的次序。但是,由于索引变化时ID值会随之变化,所以不应依赖此ID进行排序。

五、拓展的搜索功能

查询表单包含复选框列表,可以在查询处理中实现高级功能。如下表所示:

参数描述
dismax析取最大查询解析器
edismax扩展的析取最大解析器
hl搜索结果高亮
facet分面
spatial地理空间搜索,如:基于位置距离的排序
spellcheck查询词项拼写检查
资源下载链接为:https://pan.quark.cn/s/27aaeeaf622d在当今数字化代,智能停车系统已成为城市交通管理的重要组成部分。本文将详细剖析一款基于SpringBoot框架开发的停车场管理系统。该系统融合了百度地图和支付宝沙箱支付等前沿技术,致力于提升停车服务的效率与便捷性。SpringBoot是领域Java广受欢迎的微服务框架,以其简洁配置、快速启动和自动配置功能备受青睐。在该停车场管理系统中,SpringBoot作为核心架构,负责应用程序的运行与管理,为系统提供了高效、稳定的运行基础。MySQL作为系统的数据库管理系统,用于存储车辆进出记录、用户信息、收费明细等关键数据。通过精心设计的数据库表结构和高效的SQL查询,系统能够快速处理和检索大量实数据,确保稳定运行。Thymeleaf是SpringBoot中常用的模板引擎,用于动态生成HTML页面。它在顾客端页面和后台管理员页面的交互设计中发挥了重要作用,提供了简洁的语法,帮助开发者快速构建响应式用户界面,从而提升用户体验。此外,系统还集成了百度地图API,增加了地理定位功能。用户可以通过地图直观查看停车场位置,并获取导航服务。同,系统利用百度地图API实获取车位信息,帮助用户规划最优停车路线。支付宝沙箱支付是该系统的一大特色。它模拟真实交易环境,用于测试和支付验证流程的准确性。在停车场管理系统中,顾客可以通过支付宝沙箱进行安全、便捷的线上支付,简化了支付流程,提升了服务品质。系统的源码部分涵盖了完整的编程代码,包括SpringBoot的配置、控制器、服务层、持久层,以及前端界面的HTML、CSS和JavaScript等。通过学习和分析源码,开发者可以深入了解系统的架构设计和实现细节,为后续的定制和优化提供重要参考。数据库脚本是初始化数据库结构和填充测试数据的关键文件。这些SQL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值