zoukankan      html  css  js  c++  java
  • solr的基础使用

    查询运算符

    例如:http://localhost:8984/solr/mycore/select?q=*:*

    :  指定字段查指定值,如返回所有值q=*:*

    ?  匹配单个字符, 例如: q=title:??拳 可以匹配标题为“形意拳”的文档

    *  匹配零个或多个字符, 例如: q=title:*形意拳 或者 q=title:*拳 都可以匹配标题为“形意拳”的文档

    ~  表示模糊检索, 例如:q=title:xoodcopping~0.8 可以匹配到标题为“Woodchopping”的文档, 但是q=title:xoodcopping~0.9 就无法匹配到, ~后面的数组在0~1之间,数值越大相似度越高。

    AND 与操作符,例如: q=title:形意拳 AND type:sport 可以匹配到标题为形意拳并且类型为sport的文档

    OR  或操作符,例如: q=title:形意拳 OR title:悠波球 可以匹配到标题为形意拳或者悠波球的文档

    NOT 非操作符, 例如: q=type:sport NOT title:悠波球 可以匹配到所有类型为sport但是标题不是悠波球的文档

    ! 非操作符, 例如: q=type:sport !title:悠波球 可以匹配到所有类型为sport但是标题不是悠波球的文档

    - 非操作符, 例如: q=type:sport -title:悠波球 可以匹配到所有类型为sport但是标题不是悠波球的文档

    +  存在操作符,要求符号”+”后的项必须在文档相应的域中存在

    ()  用于构成子查询, 例如: q=type:sport AND ( group:sport OR title:悠波球 )

    []  包含范围检索,如检索某时间段记录,包含头尾,例如: q=date:[201507 TO 201510]

    {}  不包含范围检索,如检索某时间段记录,不包含头尾, 例如: q=date:{201507 TO 201510}

    查询参数

    q 指定查询条件, 条件项目以":"分割属性和值, 支持多个条件和子查询, 参考上面的查询运算符。

    fq 过滤条件,格式同参数q,fq是在使用q参数查询完成后,再针对结果进行过滤。

    sort 结果排序方式,支持desc和asc两种方式,例如:sort=score desc, price asc, sum(x_d, y_d) desc;  当不指定sort参数时,将会使用隐藏字段score进行desc排序。 

    start 结果偏移起始量

    rows 返回结果的数量,配合start参数可实现分页的查询

    fl Field List,指定返回结果中包含的字段, 默认返回除score等隐藏字段之外的所有字段,等同于fl=*,返回指定字段例如:fl=name, age

    df Default Field 默认查询的字段,如果在q中没有指定字段,例如:q=michael 的时候指定默认的字段 df=name, 等同于q=name:michael

    wt 响应的数据格式,支持格式:csv,geojson,javabin,json,php,phps,python,ruby,smile,velocity,xlsx,xml,sxlt

    命令行操作

    启动solr服务器 

    # solr start -p 8984

    创建core

    # solr create_core -c mycore 

     

    常用操作

    增加文档

    <add>
      <doc>
        <field name="id">1</field>  
        <field name="name">四格</field>  
        <field name="introduction">最长在家半年的死宅,三周热度,三天打鱼两天晒往</field>  
      </doc>  
    </add>
    <commit/>

    问题

    Solr中的q与fq参数的区别在那儿?

    原文链接:http://www.highersoft.net/html/notice/notice_311.html

    今天遇到一个问题,把相同的参数比如name:张三,放到q与fq,两者返回的结果完全不一样。

     经过debug发现,原因是这两个参数是solr查询的不同阶段使用的,所以结果不一样。

     如果用于q。那么,就会查所有name中包含"张三"的,然后order by score,这时就会按name的相似度来排序。

    而如果用fq,q设置为*:*。那么solr会先order by score,而因为条件是*:*,所以所有文档的相关性都是一样的,所以即使用fq过滤了,返回的最前面的却不是相关性最高的。

    综上所述,以相关性(score)为优先排序条件的,那么条件一定放在q参数中。

    个人推荐
    萨哈拉单板滑雪 https://sahala.suanhetao.com
  • 相关阅读:
    在SQL数据库中怎么去掉某一列的中的一写特殊字符
    PostgreSQL学习手册(常用数据类型)
    Oracle类型number与PG类型numeric对比和转换策略
    PostgreSQL数据库smallint、bigint转到Oracle,要用什么类型替代? 是number么,那长度分别是多少?
    Oracle中查看所有表和字段以及表注释.字段注释
    (转)不看绝对后悔的Linux三剑客之grep实战精讲
    (转)CentOS 6下配置软RAID图文详解
    (转)不看绝对后悔的Linux三剑客之sed实战精讲
    (转)CentOS 7常见的基础命令和配置
    (转)不看绝对后悔的Linux三剑客之awk实战精讲
  • 原文地址:https://www.cnblogs.com/michaelluthor/p/8719495.html
Copyright © 2011-2022 走看看