大明聊SolrSolr查询语言 JSON Request API

Posted 金沙数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大明聊SolrSolr查询语言 JSON Request API相关的知识,希望对你有一定的参考价值。

01

背景与动机


JSON Request API是由noggit作者(同时也Solr Committer Leader)在Solr.5.3带来新特性,意在改善Solr原来复杂且又丑陋查询语法。


注:JSON Request API与Solr API v2并不是一回事,JSON Request API是一种新型Solr Query DSL。API v2新版本查询API,是基于Restful API实现的。当然JSON Request API显然是基于JSON实现的咯。 不过Request API还是API v2都是Solr学习ElasticSearch靠近的表现。


以前想写简单查询其实也没有很复杂,就是写个q参数,然后指定一下rows和sort嘛,但是对于用Solr来做统计相关工作的同学,还是觉得挺烦的。因为它 

  1. 冗长,没有结构,容易出错,难于校验和debug。 f.facet_field_name.facet.range.start=5 

  2. 没有数据类型,整个世界都是String,缺乏结构,不便于编程 

  3. 对服务端而言,解释得也相当复杂。


总之,就是有一系列问题。所以在Solr5.3,Yonik小哥带来这个。当然,我们Solr的JSON解析器用的就是Noggit。

【大明聊Solr】Solr查询语言 JSON Request API

Noggit是非常牛比,非常最效,非常新颖的JSON解析器。她是流式JSON解释器,同时她还扩展JSON格式,使得她的结构更加简洁,优雅。想了解她更牛比之处请阅读noggit项目首页。


这就是JSON Request API出现的背景,当然动机就是针对这些痛点进行优化,一方面有利于推广Solr的搜索统计功能;二方面优化搜索解析效率、优化使用体验。


02

用法


在过去,我写Blog从不写用法一类的Blog。主要是这一类文章写的非常多,这次为什么要写呢,原因有二。一,Solr6.6正式推出这套API;二,貌似并没多少人关注她。这么好的特征,不能让她一直默默无闻。



因此,非常有必要来推广她,不能让这个世界都是ElasticSearch。好了,回归正题,先看来几个Query。



(1)直接POST


  • 原来写法

    http://solr.daming.com/solr/daming/select?q=helloWorld


  • JSON Request API写法


【大明聊Solr】Solr查询语言 JSON Request API


非常清淅,特别是熟悉ElasticSearch的同学们,可谓是ElasticSearch转向Solr的一条桥梁。


(2)HttpGet Method


JSON Request API作为新版的query api,其实它也是相当成熟了的,功能也相当丰富,也基本兼容旧版API。当是HttpGet是需要一个参数来接收我们新版JSON Request内容的。通过Parameter json={}的方式来接收JSON Request API的查询语句,且新版API与旧版API完全兼容,即是可以一起来描述一个查询请求。


这种情况下,JSON Request API完全就是原来查询语法的一个扩展,即是多出一个叫json的新参数。


【大明聊Solr】Solr查询语言 JSON Request API


(3)一个完整的示例


老实说,JSONS Request API定义真的是非常人性化、贴近自然语言。


【大明聊Solr】Solr查询语言 JSON Request API


参数解释 :

  1. query,等同于q

  2. filter,等同于fq,注意新版API是结构化的,并且是有类型的。因为我们并不需要向以前那么样拼一堆的fq,如今如只需要一个数组即可。

  3. offset,等同于start

  4. limit,等同于rows

  5. sort,还是sort

  6. facet,新款Facet API,具体下篇再继续讨论。


【大明聊Solr】Solr查询语言 JSON Request API

跟旧版一样,并不需要一个请求里为所有参数进行赋值。同时所有参数都是可以缺省,当新旧版同语义的参数出现时,由旧版本参数值覆盖新版。 

按Yonik的说法,JSON Request API属于二级查询,因为它由json=开始。那么即是上级会覆盖下级。


noggit json string完全支持扁平化,意思是说我们通过打点的方式把查询语句变得扁平化,然后拼在上级结构里。此时同样满足上级覆盖下级的基本规则。


03

后语


Solr拥有一套完整、非常强大且复杂的查询语法,所以如果JSON Request API只是这样就结束的话,那就一点都不Solr了。因此还下一篇,下篇我们来聊聊JSON Facet API,这是才我为什么一直想要来介绍一下JSON Request API的原因。 


在基本查询部分,JSON Request API的确没什么优势,我也建议你继续旧语法。但如果你需要用Solr来做统计的话,尽管Solr的Sql让你很失望,但请相信我,JSON Facet API会让你耳目一新,然后爱上她的。



【大明聊Solr】Solr查询语言 JSON Request API

https://blog.csdn.net/zteny/article/details/73179001

【大明聊Solr】Solr查询语言 JSON Request API



收到的都是惊喜



以上是关于大明聊SolrSolr查询语言 JSON Request API的主要内容,如果未能解决你的问题,请参考以下文章

姑娘你是在玩火啊...

laravel 查询返回未定义

08.Solr简介

SolrSolr的安装部署

TCP/IP之大明王朝邮差

solrsolr5.0整合tomcat