Solr管理控制台的查询表单
所有与solr核心服务有关的交互,如查询处理,都是通过HTTP请求执行的。填写查询表单之后,创建一个HTTP Get请求并发送给Solr。
Solr查询表单的所有参数
查询参数概览表:
参数 | 取值 | 描述 |
---|---|---|
defType | /select | 选择用来处理查询的查询分析器。 |
q(query) | iPod | 主查询参数。根据该参数中的词项与文档的相似度,对文档评分 |
fq(filter query) | manu:Belkin | 过滤查询;通过过滤器筛选结果集文档,但不影响评分。在此例中,我们将制造商字段manu限定在Belkin,对结果进行筛选 |
sort | price asc | 指定排序字段与排序方式。根据响应的分数或另一个指定的特性对查询的响应进行正序或倒序排序。 在此例中我们希望按照价格从低到高升序排列文档。 |
start | 0 | 指定搜索结果的起始页。(默认0)。 |
rows | 10 | 页面大小。控制一次返回多少条数据(默认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返回原始的搜索结果数据,并提供核心的搜索功能,要为用户提供优质的搜索体验,则需要根据这些结果和功能进行自主设计与开发。 以下为示例结果查询所返回的搜索结果。搜索结果是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数据存储最大的不同就在于排名检索:根据文档与查询的相关性进行排序,最相关的文档将处于列表最前端。
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 | 查询词项拼写检查 |