zoukankan      html  css  js  c++  java
  • solr6.6初探之查询篇

    关于搜索与查询,首先我们来看一张图:

    这张图说明了solr查询原理:

    1.当通过solr发起查询的时候,引擎会选择一个RequestHandler(从字面意思上来说就是请求处理器)来进行查询处理

    2.查询的请求处理器会选择一个查询解析器来解析查询参数(语法

    3.solr会根据查询列在索引中搜索存储字段,默认是全部

    4.根据偏移量及数据量(start,rows)对数据进行筛选,类似于mysql的limit

    5.将筛选结果进行一次filter(过滤) ,最终将结果作为搜索响应的一部分。过滤查询分配一个单独的缓存通过fq将大大提高查询性能

    6.最后将使用一个ResponseWriter来将搜索结果输出到客户端

    二.常见的查询语法总结:

    一.基本查询

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

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

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

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

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

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

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

      df   默认的查询字段,一般默认指定。

      qt  (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。

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

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

    二. Solr的检索运算符

      “:”  指定字段查指定值,如返回所有值*:*

      “?”  表示单个任意字符的通配

      “*”  表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)

      “~”  表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。

      AND、||  布尔操作符

      OR、&&  布尔操作符

      NOT、!、-(排除操作符不能单独与项使用构成查询)

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

      ( )  用于构成子查询

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

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

      三. 高亮

      h1  是否高亮,hl=true,表示采用高亮

      hl.fl  设定高亮显示的字段,用空格或逗号隔开的字段列表。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用hl.requiredFieldMatch选项。

      hl.requireFieldMatch   如果置为true,除非用hl.fl指定了该字段,查询结果才会被高亮。它的默认值是false。

      hl.usePhraseHighlighter   如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。

      hl.highlightMultiTerm   如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。

      hl.fragsize   返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。

  • 相关阅读:
    (转贴).net中组件拒绝访问解决办法
    也写写我的 XP+sp2 不能安装Sqlserver 2000 解决办法!
    不是技巧的技巧,让web.config也能智能感知.
    终于搜了一个.net项目开发的版本控制工具
    网上选课系统分析与设计
    写一下最近发现的自认为的好东东
    你心目中的Edu2.0是什么样的?(转载)
    内容管理系统(CMS)的设计和选型
    开源blog的取舍
    收藏的国内外网站设计资源
  • 原文地址:https://www.cnblogs.com/niechen/p/7654796.html
Copyright © 2011-2022 走看看