Solr 搜索的过程和所须要的參数

一个典型的搜索处理过程,以及所须要的參数例如以下:

  1. qt:指定一个RequestHandler,即/select。缺省是使用DisMax RequestHandler
  2. defType:选择一个query parser。缺省是RequestHandler中配置的那个
  3. qf:指定须要搜索的field。假设不指定就搜索全部的field
  4. start, rows:指明分页參数
  5. fq:指明须要怎样过滤搜索结果。以及缓存搜索结果
  6. wt:指定搜索结果的格式,比方json或xml

搜索所须要的參数基本上能够分为三类:

  • 须要搜索的字符串
  • 调整搜索的參数(指定被搜索的field、为某些field添加权值、等等)
  • 搜索结果展示的參数(排序、结果过滤、分页、高亮显示、等等)

搜索请求參数:


參数

说明

q

Query,要搜索的内容。

  • 假设要搜索一个句子,用引號引起来:q="Hello wolrd"
  • 假设指定搜索某个域:q=field_name:content
  • 假设是中文,用引號引起来,就是全内容匹配才返回,如:q="笔记"
  • 假设要搜索多个单词、句子,使用加号(+):q="笔记"+"配置"
  • 假设要排除含有某个keyword的,使用减号(-):q="笔记"-"配置"


fq
Filter Query。搜索结果过滤(结果会被缓存起来):

  • fq=popularity:[10 to *]:仅仅返回popularity大于10的结果
  • 须要同一时候满足两个条件的情况:fq=popularity:[10 TO *]&fq=section:0
  • 上面这样的也能够写成:fq=popularity:[10 TO *]+fq=section:0

后两种的不同点:前一种:搜索结果分开存在缓存中,然后取交集。后一种:搜索结果存在一个缓存中


sort

指定搜索结果依照某个域来排序。样例:

  • score desc(缺省):依照搜索分数降序排序
  • price asc:依照“price”域升序排序
  • nStock desc, price asc:先依照nStock降序,再依照price升序


start, rows


返回第start条開始。一共rows条记录。样例:

  • start=11&rows=100
  • 缺省:start=0, rows=10


fl

Field List,要返回的域。比方“id”、*,假设有多个,用逗号(,)或空格分开。还能够返回score。样例:

  • fl=id,name
  • fl=id,score
  • fl=*,score


df

Default Field,默认的查询字段,又一次指定并覆盖schema.xml中的default field

wt

Writer,指定一个writer以返回不同的格式,比方:json, xml...

facet
统计查询结果:

按某个域统计:facet=true&facet.field=author(依照“author”这个域统计)


defType

指定一个Request Handler,然后使用它所配置的parser,比方dismax, edismax来运行搜索。缺省是dismax。即"lucene" parser。dismax、edismax支持为每一个被搜索的域指定权值。以影响score。

dismax 是 Maximum Disjunction 的缩写。


qf

Query Field。指定要搜索的域,覆盖df,同一时候能够为某个域设置权值,须要配合defType=dismax或defType=edismax,样例:

  • defType=dismax&qf=author^10
  • defType=dismax&qf=author^10+name^2+content

參考:https://cwiki.apache.org/confluence/display/solr/Common+Query+Parameters

注:关于Maximum Disjunction的定义:

A query that generates the union of documents produced by its subqueries, and that scores each document with the maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries.

大概就是:一个查询由若干个子查询组成,每一个子查询都有一个得分,总分=最大分+其它子查询的分数×tieBreakerMultiplier。

时间: 2024-10-25 22:15:03

Solr 搜索的过程和所须要的參数的相关文章

第8章2节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-解析处理命令行參数

MonkeyRunnerStarter是MonkeyRunner启动时的入口类,由于它里面包括了main方法.它的整个启动过程主要做了以下几件事情: 解析用户启动MonkeyRunner时从命令行传输进来的參数: 由于MonkeyRunner须要依据指定的參数才干做事情,比方输入的一个须要执行的脚本. 假设确实不知道不论什么參数的话它就会进入MonkeyRunner的交互模式,事实上就是Jythong的交互模式,让用户能够边写代码边执行 启动AndroidDebugBridge: 事实上就是启动

关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造)

摘要:在中文搜索中的标点.符号往往也是有语义的,比如我们要搜索“C++”或是“C#”,我们不希望搜索出来的全是“C”吧?那样对程序员来说是个噩梦.然而在中文分词工具mmseg中,它的中文分词是将标点与符号均去除的,它认为对于中文来讲标点符号无意义,这明显不能满足我们的需求.那么怎样改造它让它符合我们的要求呢?本文就是针对这一问题的详细解决办法,我们改mmseg的源代码. 关键字:Solr, mmseg, 中文, 分词, 标点, 符号, 语义 前提:Solr(5.0.0版本),mmseg4j(1.

JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误

问题一:出现控制台坏的响应错误一Bad request 控制台出现错误如下: Bad Request request: http://hostIP:8983/solr/update?wt=javabin&version=1 解决方法: 出现以上错误的原因是,solr服务器上配置的Field和javabean提交的Field不能对应, 导致solr服务器找不到域,拒绝访问. 打开SOLR_HOME下的conf文件夹找到schema.xml文件,在其中添加对应的域. 例如以下代码添加了:title,

solr搜索流程

一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query,使用所有搜索器IndexSearcher执行查询对象Query得到TopDocs,遍历TopDocs得到文档Document 2. Solr搜索的工作流程: 流程说明: 用户输入查询字符串,根据用户的请求类型qt(查询为/select)选择请求处理器RequestHandler,根据用户输入的参数

Solr搜索技术

Solr搜索技术 今日大纲 回顾上一天的内容: 倒排索引 lucene和solr的关系 lucene api的使用 CRUD 文档.字段.目录对象(类).索引写入器类.索引写入器配置类.IK分词器 查询解析器.查询对象(用户要查询的内容).索引搜索器(索引库的物理位置).排名文档集合(包含得分文档数组) 六种高级查询(相似度查询) 分词器(扩展词典.停用词典) 分页 得分(激励因子(作弊)) 高亮 排序 ●    Solr简介.运行 ●    Solr基本使用 ●    Solr Core 配置

Solr搜索结果说明 (转)

在admin页面,输入相关内容后,会返回xml格式的内容.说明如下: <?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">3</int&g

linux搜索文件过程

1.文件中的数据是放在磁盘的数据区中的,而一个文件名则是通过对应的i节点与这些磁盘块联系起来,这些盘块的号码就存放在i节点的逻辑块数组i_zone[]中.在文件系统的一个目录中,其中所有文件名信息对应的目录项保存在该目录名文件的数据块中,例如,root/下的所有文件名的目录项就保存在root/目录名文件的数据块中,而文件系统根目录下的所有文件名信息则保存在指定i节点(1号节点)的数据块中,文件名的目录项结构如下: struct dir_entry{ unsigned short indoe;//

solr搜索之tomcat运行solr(五)

1      tomcat上运行solr 准备环境: apache-tomcat-7.0.77.zip, solr-4.10.2.zip, java version:1.7 下载tomcat:http://tomcat.apache.org/ 下载solr:http://lucene.apache.org/solr/ or  http://www.apache.org/dyn/closer.cgi/lucene/solr/ ====================================

solr搜索结果转实体类对象的两种方法

问题:就是把从solr搜索出来的结果转成我们想要的实体类对象,很常用的情景. 1.使用@Field注解 @Field这个注解放到实体类的属性[字段]中,例如下面 1 public class User{ 2 /** 3 * id 4 */ 5 @Field 6 private String id; 7 /** 8 * 用户名 9 */ 10 @Field 11 private String userName; 12 /** 13 * 密码 14 */ 15 @Field 16 private S