Solr之搜索语法。

solr查询参数说明

常用

  • q        —— 查询字符串,必须的。
  • fl        —— 指定返回哪些字段内容,用逗号或空格分隔多个。
  • start  —— 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
  • rows —— 指定返回结果最多有多少条记录,配合start来实现分页。
  • sort   —— 排序,格式:sort = <field name> + <desc|asc>[,<fieldname>+<desc|asc>]...。示例:(inStock desc,price asc)表示先“inStock”降序,再“price”升序,默认是相关性降序。

             注:排序字段只能针对数值型如:int,double等。

  • wt      —— (write type)指定输出格式,可以有xml,json,php,phps,后面solr 1.3增加的,要用通知我们,因为默认没有打开。
  • fq       —— (filter query)过滤查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是2008到20091031之间的。

不常用

  • q.op —— 覆盖schema.xml的defaultOperator(有空格时用“AND”还是用“OR”操作逻辑),一般默认指定。
  • df      —— 默认的查询字段,一般默认指定。
  • qt      —— (query type)指定哪个类型来处理查询请求,一般不用指定,默认是standard。

其他

  • indent   —— 返回的结果是否缩进,默认关闭,用indent = true|on开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
  • version —— 查询语法的版本,建议不使用它,由服务器指定默认值。

Solr的检索运算符

  • “:” 指定字段查指定值,如返回所有值*:*
  • “?” 表示单个任意字符的通配。
  • “*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)。
  • “~” 表示模糊检索,如检索贫血类似于“roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
  • 邻近检索,如检索相隔10个单词的“apache”和“jakarta”,“jakarta apache”~10。
  • “^” 控制相关度检索,如检索jakarta apache,同时希望去让“jakarta”的相关度更加好,那么在其后加上“^”符号和增量值,即jakarta^4 apache。
  • 布尔操作符 AND、||
  • 布尔操作符 OR、&&
  • 布尔操作符 NOT、!、- (排除操作符不能到哪都与项使用构成查询)
  • “+” 存在操作符,要求符号“+”后的项必须在文档相应的域中存在。
  • () 用于构成子查询
  • [] 包含范围检索,如检索某时间段记录,包含头尾,date:[201707 TO 201710]
  • {} 不包含范围检索,如检索某时间段记录,不包含头尾,date:{200707 TO 200710}

             注:范围检索字段只适用于:String,int,double,date,不能用于long类型的字段。

  • | 转义操作符,特殊字符包括+ - && || ! () {} [] ^ " ~ * ? : \

solr查询的一些常用语法

  • 首先假设我的数据里fields有:name,tel,address预设的搜索是name这个字段,如果要搜寻的数据刚好就是name这个字段,就不需要指定搜寻字段名称。
  • 查询规则:

              如欲查询特定字段(非预设字段),请在查询词前加上该字段名称加“:”(不包含"号)符号,例如:address:北京市海淀区上地软件园 tel:88xxxxx1

  • q 代表 query input。
  • version 代表solr版本(不建议不要变动此变量)。
  • start代表显示结果从哪一笔结果资料开始,预设位0代表第一笔,rows是说要显示几笔数据,预设为10笔(因为有时查询结果可能有几百笔,但不需要显示所有结果,所以预设是从第一笔开始到第十笔),所以若要显示第10到30笔就改为:

             http://localhost:8080/solr/select/?indent=on&version=2.2.&q=address:北京市海淀区上地软件园+tel:88xxxxx1&version2.2&start=10&rows=20&indent=on(indent代表输出的xml要不要缩进,预设位开启on)。

  • 另外,要限定输出结果的内容可用“fl=”加上你要的字段名称,如以下这个范例:

              http://localhost:8080/solr/select/?indent=on&version=2.2&q=text:北京+OR+text:亿度&start=0&rows=10&fl=name,address,tel

              在fl = 之后加上了name,address,tel,所以结果会如下:

<result name = "response" numFound = "1340" start = "0">

<doc>

<str name = "name">北京亿度</str>

<str name = "address">北京市海淀区上地软件园</str>

<str name = "tel">88xxxxxx1</str>

</doc>

<doc>

<str name = "name">北京亿度</str>

<str name = "address" />

<str name = "tel">88xxxxxx1</str>

</doc>

</result>

  • 查询name或address:直接输入查询词,如:亿度,送出的内容即为:name:亿度 AND address:海淀
  • 若要搜寻联集结果:请在词与词间空格或加上大写“OR”(不包含"号)。例如:text:海淀 OR text:亿度 或 text:海淀 OR 亿度 或 海淀 亿度 或 name:亿度 OR tel:88xxxxxx1 或 name:亿度 tel:88xxxxxx1
  • 若要搜寻交集结果:请在词与词间加上大写“AND” 或 "+"(不包含"号)。例如:text:海淀 AND 亿度 或 +text:海淀 +text:亿度 或 name:亿度 AND tel:88xxxxxx1或 name:(+亿度 +海淀)。
  • 排除查询:在要排除的词前加上“-”(不包含"号)号,例如:海淀 -亿度,搜索结果不会有包含亿度的词的结果在内。
  • Group搜寻:使用“()”来包含一个group,如希望搜寻在店名字段内同时有“台北”(不包括"号)及“火车站”(不包含"号)。
  • 增加权重:如要搜寻“北京 加油站”(不包含"号)但因为回传太多笔资料内有“中华”(不包含"号)或“加油站”(不包含"号)的结果,所以想要把有包含“加油站”(不包含"号)的数据往前排,可使用"^"(不包含"号)符号在后面加上愈增加的权重数,像是“2”,则可以这样做:北京 加油站^2,会同时搜寻含有北京或加油站的结果,并把加油站这个词加权,所以搜寻时会先判断加油站这一个词在搜寻结果中的比重,甚至假设一笔数据内加油站出现过两次以上的就更加会有优先权。查询时在查询词后加上“^”(不包含"号)再加上权重分数,例如:亿度 AND "北京"^2 或 亿度^2 OR 北京。
  • Wildcard 搜寻使用“*”符号:如果输入“中国*银(不包含"号)”,结果会有中国信托商业银行,中国输出入银行图书阅览室,中国商银证券、中国及银之间可夹任何长短字词。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值