• solr查询参数


    部分摘自:http://blog.csdn.net/u010342038/article/details/52997388

    界面:

    参数说明:

    注意,以下是对所有的查询解析器都通用的参数。

    defType :选择用来处理查询的查询分析器。

    q  (query)查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*,

    fq  (filter query)过虑查询,提供一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果,例如:q=id:1&fq=sort:[1 TO 5],找关键字id为1 的,并且sort是1到5之间的。

    sort  排序方式,例如id  desc 表示按照 "id" 降序

    start  返结果的第几条记录开始,一般分页用,默认0开始

    rows  指定返回结果最多有多少条记录,默认值为 10,配合start实现分页

    fl  (field list)  指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort

    df (default field)  默认的查询字段,一般默认指定。

    wt  (writer type)指定输出格式,有 xml, json, php等

    indent   返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。

    version   查询语法的版本,建议不使用它,由服务器指定默认值。

    详细参数说明

    • defType

    参数defType指定Solr执行主查询时使用的查询解析器。比如:defType=dismax。
    如果没有指定defType,将默认使用标准个查询解析器。

    • sort

    参数sort指定查询结果升序或降序。这个参数可以作用于数字或字母内容。可以使用全消息或全大写。(比如,全是asc或ASC)。
    Solr可以根据文档分值或其他被索引或使用DocValues(即,在schema.xml文件中使用multiValued="false"和docValues="true"或者indexed="true"的字段,如果没有启用DocValues,将使用检索数据)的单值字段值来进行排序。提供:

    没有进行标记(即,字段没有analyzer,并且内容被解析进标记,致使排序不一致),或

    使用分析器analyzer(比如KeywordTokenizer)且只产生一个检索词。
    如果你向对一个需要进行标记便于检索的字段排序,可以在schema.xml文件中使用<copyField>指定复制字段。然后就可以查询该字段,在克隆字段上排序。
    下面的表格将说明如果设置各种参数来对Solr响应进行排序:

    示例

    结果

     

    如果没有指定参数sort,将根据打分降序排列。

    score desc

    根据打分从高到底降序排列。

    price asc

    根据字段price升序排列。

    inStock desc, price asc

    根据字段inStock降序排列,然后根据字段price升序排列。

    关于排序参数:

    排序必须包含一个字段名(或打分),之后跟一个空白字符(在URL字符串中使用+或%20),之后跟排序方向(asc或desc)。

    多种排序规则可以使用逗号隔开,使用这样的语法:sort=<field name>+<direction>,<field name>+<direction>],...

    如果有多个排序条件,只有在第一个排序结果并列,第二个才生效。如果有第三个从句,只有当第一个和第二个都并列相同时,才生效。依次类推。

    • start

    该参数指定Solr查询响应展示内容的偏移量。默认值是0.换句话说,默认情况下,Solr返回的结果没有偏移,从头开始。设置一个值,比如3,Solr将跳过前面 几条数据,从指定偏移位置开始返回。你可以使用这种方式来分页。比如,如果参数rows设置为10,可以通过设置start为0来连续返回几页数据,然后使用相同的查询参数,设置start为10,再次查询,然后设置20.

    • rows

    可以使用参数rows来进行分页查询。这个参数指定了一次查询最大返回文档的数目。默认值是10.就是说,默认一次查询返回10个文档数据。

    • fq

    参数fq可以定义一个限制返回文档父集,不影响评分。通过指定参数fq将缓存主查询,用来提高复杂查询速度。当之后使用相同的过滤器,将会命中缓存,缓存中的结果立即返回。
    使用参数fq时,需要注意:

    参数fq可以在一个查询中指定多次。只有每个参数实例的交集才能返回。在下面的例子中,只有popularity大于10且section是0的才能返回。fq=popularity:[10 TO *]&fq=section:0

    过滤查询可以包含复杂的布尔查询。上面的例子也可以使用两个从句一个fq实现:fq=+popularity:[10 TO *] +section:0。

    每个过滤查询的文档集都是独立缓存的。一次,关于签名的例子:使用一个fq两个从句,和使用两个分开的fq将不想同(了解调整高速缓存大小和确保过滤缓存,看配置Solr实例)。

    对所有参数:在URL中特殊字符需要进行转移为十六进制。在线工具http://meyerweb.com/eric/tools/dencoder/可以提供这种转码。

    • fl

    参数fl限制响应信息中包含的字段列表。该字段需要在索引时被存储。
    字段列表可以通过空格或逗号分割。字符串"score"可以被用来指明特定查询的每个文档的分数作为字段返回。通配符"*"表示文档的所有字段。可以添加伪字段、函数、transformers作为字段返回。
    下表是如果使用fl的基础示例:

    字段

    结果

    id name price

    只返回id, name, 和 price

    id,name,price

    只返回id, name, 和 price

    id name, price

    只返回id, name, 和 price

    id score

    只返回id和score

    *

    返回文档所有字段。这是参数fl默认值。

    * score

    返回文档所有字段,以及每个文档的分值。

    Function Values

    函数可以为结果中每一个文档计算结果,并返回伪字段:fl=id,title,product(price,popularity)。

    Document Transformers

    Document Transformers可以用来修改查询结果中的每一个文件的返回信息:fl=id,title,[explain]。

    Field Name Aliases

    可以指定字段、函数、transformer的显示名,比如:fl=id,sales_price:price,secret_sauce:prod(price,popularity),why_score:[explain style=nl],

    "response":{"numFound":2,"start":0,"docs":[

    {

    "id":"6H500F0",

    "secret_sauce":2100.0,

    "sales_price":350.0,

    "why_score":{

    "match":true,

    "value":1.052226,

    "description":"weight(features:cache in 2) [DefaultSimilarity], result of:",

    "details":[{

    ...

    • debug

    参数debug可以指定多次,并支持以下参数:

    debug=query: 至返回查询的调试信息

    debug=timing: 返回查询执行时间的调试信息

    debug=results: 返回结果分值的调试信息

    debug=all: 返回所有的调试信息(也可以使用debug=true)
    为了向后兼容,debugQuery=true可以使用debug=all替代。
    默认查询不包括调试信息。

    • explainOther

    参数explainOther指定Lucene查询来标记文档集。如果非空,本次查询将返回调试信息,以及主查询(指定q参数)查询文档集的解释信息。比如:q=supervillians&debugQuery=on&explainOther=id:juggernaut。
    上面的查询允许你检查最佳匹配的分值解释信息,可以与id:juggernaut进行比较,可以知道为什么不是你期望的排名。
    默认参数为空,没有额外解释信息返回。

    • timeAllowed

    This parameter specifies the amount of time, in milliseconds, allowed for a search to complete. If this time expires before the search is complete, any partial results will be returned.
    此参数指定允许搜索完成的时间,以毫秒为单位。如果处理超时,只返回部分信息。

    • omitHeader

    This parameter may be set to either true or false.
    该参数可以设置为true或false。
    如果设置为true,返回结果中不包含header数据。header数据包括请求信息,比如请求完成时间。默认是false。

    • wt

    指定用于格式化响应结果的请求writer。详细信息查看Response Writers

    • cache=false

    Solr默认缓存所有的查询、过滤查询结果。为了禁用缓存,设置参数cache=false。
    还可以使用cost选项来控制非缓存的过滤查询。这允许你能够指定低耗非缓存过滤,而不是高耗非缓存过滤器。
    对于高耗过滤器,如果cache=false,cost>=100,查询实现了PostFilter,在匹配主查询和其他过滤查询之后,一个收集器将被请求来进行查询和过滤文档。可以有多个后置过滤器,可以根据cost配置。
    比如:

    // normal function range query used as a filter, all matching documents

    // generated up front and cached

    fq={!frange l=10 u=100}mul(popularity,price)

     

    // function range query run in parallel with the main query like a traditional

    // lucene filter

    fq={!frange l=10 u=100 cache=false}mul(popularity,price)

     

    // function range query checked after each document that already matches the query

    // and all other filters. Good for really expensive function queries.

    fq={!frange l=10 u=100 cache=false cost=100}mul(popularity,price)

    logParamsList

    默认情况下,Solr日志记录所有请求参数。从4.7版本开始,可以设置参数来限制哪些参数被记录。这有助于记录你认为比较重要的参数。比如,你可以定义:logParamsList=q,fq。只有q和fq参数会被记录。
    如果不希望记录任何参数,你可以给参数logParamsList赋空值(比如:logParamsList=)。

     

    检索运算符

    参数

    描述

    指定要查找的字段,比如:title:"The Right Way" AND text:go

    匹配单一字符,比如:te?t匹配test/text

    *

    匹配0或多个字符,比如:tes*匹配test/testing/tester 注意使用*开头的匹配会导致性能问题

    ~

    基于编辑距离的模糊查询,比如:roam~匹配roams/foam/foams/roam. roam~1(指定距离必须是1)匹配roams/foam,但不会匹配foams

    ~n

    邻近查询,查找相隔一定距离的单词,比如:"jakarta apache"~10(相隔10个单词)

    to

    范围查询,{}不包含边界,[]包含边界,比如:title:{Aida TO Carmen}

    ^

    加权因子,比如:jakarta^4 apache 查找结果中jakarta更相关 注意基本权重是1,如果小于1那么会被惩罚,大于1是加大。

    ^=

    指定查询语句的score得分为常量,比如:(description:blue OR color:blue)^=1.0 text:shoes

    AND(&&)

    运算符两边的查询词同时出现 比如:"jakarta apache" AND "Apache Lucene" 注意这里的AND和OR必须为大写

    OR

    运算符两边的查询词至少一个出现, 默认运算符,比如 "jakarta apache" jakarta 等价于 "jakarta apache" OR jakarta

    NOT(!)

    运算符后面的查询词不出现,比如"jakarta apache" NOT "Apache Lucene"

    +

    运算符后面的查询词出现(known as the "required" operator),比如+jakarta lucene查询必须包含jakarta,而lucene可以出现可不出现

    -

    不能包含运算符后面的查询词 "jakarta apache" -"Apache Lucene"

    []

    包含范围边界

    {}

    不包含范围边界

    注意:使用+和-比AND更加明了,建议使用这个。

    短语查询:如"zjf xhj"将引号内的内容作为一个整体。

    注意:通配符*和?不支持短语查询()

    转义字符

    + - && || ! ( ) { } [ ] ^ " ~ * ? : /

    这些字符在solr中具有特殊的含义,如果要使用这么字符本身含义,需要利用反斜杠进行转义,比如: (1+1):2

    子查询语句

    (jakarta OR apache) AND website 查询jakarta或apache出现,并且website必须出现 title:(+return +"pink panther") 查询title中包含return和"pink panther"

     

    关于AND和OR的用法:

    假如有这两条数据:

    第1条id为1,第2条id为2,。

    content:zjf hello代表content:zjf OR hello 这里的hello并不是在content中查找,而是在默认搜索字段上查找的。

    content:zjf content:hello 代表content中有zjf或者hello关键字,等于:content:(zjf hello)

    大部分情况下我们在一个字段上进行检索,所以会设置默认搜索字段。所以AND和OR的一般使用场景是zjf AND xhj这种。

    短语查询:当我们输入 zjf xhj的时候,是一种或的关系,如果我们需要检索"zjf xhj"整体,那么就需要用引号括起来。

     

    使用soloJ的方式:

    String params = "(title:笔记 OR content:笔记) AND catalog_id:2";
    SolrQuery query = new SolrQuery();
    query.setQuery(params);

     

    设置默认查询字段的两种方式:

    schema.xml中defaultSearchField和solrconfig.xml中df属性都是默认搜索字段的意思,不过后者只针对"/select"请求。优先级是solrconfig.xml的df高于schema.xml的defaultSearchField。

    solrconfig中的例子:

    <requestHandler name="/select" class="solr.SearchHandler">

    <!-- default values for query parameters can be specified, these

    will be overridden by parameters in the request

    -->

    <lst name="defaults">

    <str name="echoParams">explicit</str>

    <int name="rows">10</int>

    <str name="df">text</str>

    </lst>

    </requestHandler>

    也可以在http请求中加入df参数控制本次请求的的默认搜索字段

     

     

    字段名称

    字段含义

      

    indexed

    如果该字段是要做查询的,需要将其设置为indexed,进行索引,以便能够根据该字段进行查询。

    但是与具体分词手段无关,如果涉及到如果分词,需要使用type属性

      

    stored

    在solr查询结果中能够正常返回,如果一个字段stored=false,则查询结果不会包括该字段。

     

    也就是说,只有配置了indexed=true的列才可以查询,只有配置stored=true的列才可以返回结果。

     

     

    q和fq的顺序:

    fq有可能从缓存中获取,所以一般是先执行fq,然后将fq结果和q一起传给lucene去检索数据。

  • 相关阅读:
    多线程---同步函数的锁是this(转载)
    函数
    流程控制
    基本语句和运算
    基本数据库类型
    迷宫问题
    Dungeon Master(逃脱大师)-BFS
    HTML元素常用属性整理
    Java_hutool 发起请求
    jQuery Autocomplete
  • 原文地址:https://www.cnblogs.com/xiaolang8762400/p/7435961.html
Copyright © 2020-2023  润新知