美文网首页
Solr查询

Solr查询

作者: waynedeng | 来源:发表于2016-01-30 21:25 被阅读1599次

    在Rails使用Sunspot习惯了,可能对Solr的原生查询完全不了解,其实Sunspot对Solr的查询进行了非常完美的封装,Sunspot的查询会转换为这样的请求(参见solr.log):

    INFO  - 2016-01-30 20:19:20.893; org.apache.solr.core.SolrCore; [collection1] webapp=/solr path=/select params={fl=*+score&sort=updated_at_d+desc&start=0&q=安徽&qf=title_text+content_text&wt=ruby&fq=type:Bid\:\:Info&fq=close_tag_i:0&rows=20&defType=edismax} hits=1 status=0 QTime=20
    

      {fl=*+score&sort=updated_at_d+desc&start=0&q=安徽&qf=title_text+content_text&wt=ruby&fq=type:Bid\:\:Info&fq=close_tag_i:0&rows=20&defType=edismax}
    

    这个才是Solr服务器真正能够理解的查询参数,当我们遇到使用Sunspot无法解决的问题的时候,就需要直接越过Sunspot来调用Solr了。Solr接受的是HTTP协议的接口调用,因此查询的参数都是通过URL参数来进行传递,而且参数中的值都需要进行URL的编码。

    下面来详细介绍Solr的查询语法。

    Solr默认有三种查询解析器(Query Parser):

    • Standard Query Parser
    • DisMax Query Parser
    • Extended DisMax Query Parser (eDisMax)

    第一种是标准的Parser,最后一种是最强大的,也是Sunspot默认使用的Parser。

    支持的参数:

    • defType: 选择查询解析器类型,例如dismax, edismax
    • q:主查询参数(field_name:value)
    • sort:排序,例如score desc,price asc
    • start:起始的数据偏移offset,用于分页
    • raws:一次返回的数量,用于分页
    • fq:filter query 返回结果的过滤查询
    • fl:fields to list 返回的字段(*, score)
    • debug:返回调试信息,debug=timing,debug=results
    • timeAllowed:超时时间
    • wt:response writer返回的响应格式

    下面是DisMax Parser可以使用的:

    • qf:query fields,指定查询的字段,指定solr从哪些field中搜索,没有值的时候使用df
    • mm:最小匹配比例
    • pf:phrase fields
    • ps:phrase slop
    • qs:query phrase slop

    特殊符号意义:

    • ?:te?t 单个字符匹配
    • *:tes* 多个字符匹配
    • ~:fuzzy searches(模糊匹配),roam~,roams/foam/foams
    • count:{1 TO 10}:range search 范围检索
    • ^:Boosting a Term(升级权重),jakarta^4 apache, "酒店"^4 "宾馆"
    • ^=:Constant Score with(指定分数),(description:blue OR color:blue)^=1.0 text:shoes

    逻辑操作

    • AND 或者 &&
    • NOT 或者 !
    • OR 或者 !!
    • + 必须满足
    • - 剔除,比如 title: -安徽,返回的是title中不含有"安徽"的所有结果

    回顾复习

        fl=*+score
        sort=updated_at_d+desc
        start=0
        q=安徽
        qf=title_text+content_text
        wt=ruby
        fq=type:Bid\:\:Info
        fq=close_tag_i:0
        rows=20
        defType=edismax
    

    夏书记的需求:

    q=(酒店 OR type_i:0)
    

    Solr的查询可以在图形界面中进行测试:

    Paste_Image.png

    相关文章

      网友评论

          本文标题:Solr查询

          本文链接:https://www.haomeiwen.com/subject/kgtskttx.html