Solr搜索引擎 — 查询命令和两种中文分词使用

Stella981
• 阅读 777

Solr搜索引擎 — 查询命令和两种中文分词使用

已经和mysql建立好了关联,可以查询和更新mysql的数据量,接下来就是进阶的使用方式了

附上:

喵了个咪的博客:http://w-blog.cn

Solr官网:http://lucene.apache.org/solr/

PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本

一,查询命令的基本使用

基本查询方式

  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 查询语法的版本,建议不使用它,由服务器指定默认值。

检索运算符

  “:” 指定字段查指定值,如返回所有值*:*
  “?” 表示单个任意字符的通配
  “*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
  “~” 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
  AND、|| 布尔操作符
  OR、&& 布尔操作符
  NOT、!、-(排除操作符不能单独与项使用构成查询)
  “+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在²
  ( ) 用于构成子查询
  [] 包含范围检索,如检索某时间段记录,包含头尾,date:[201507 TO 201510]
  {} 不包含范围检索,如检索某时间段记录,不包含头尾date:{201507 TO 201510}

二、IK中文分词

下载版本匹配的IK分词jar包

> cd server/solr-webapp/webapp/WEB-INF/lib
> wget https://search.maven.org/remotecontent?filepath=com/github/magese/ik-analyzer/7.7.1/ik-analyzer-7.7.1.jar -O ./ik-analyzer-7.7.1.jar 
> wget https://search.maven.org/remotecontent?filepath=com/github/magese/ik-analyzer-solr7/7.x/ik-analyzer-solr7-7.x.jar -O ./ik-analyzer-solr7-7.x.jar 

定义fieldType对应IK分词

> vim server/solr/new_core/conf/managed-schema

<!-- 257行ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
  <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

修改app_name 的 field类型

<field name="appName" type="text_ik" indexed="true" stored="true" />

然后重启solr

> solr restart -force

分词效果

Solr搜索引擎 — 查询命令和两种中文分词使用

这个时候去查询数据还是无法实现分词查询,需要重新初始化数据

Solr搜索引擎 — 查询命令和两种中文分词使用

查询时候就有分词的效果了

Solr搜索引擎 — 查询命令和两种中文分词使用

三、Solr自带中文分词

自带中文分词

> cp contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-7.7.1.jar  server/solr-webapp/webapp/WEB-INF/lib

配置自带分词fieldType

> vim server/solr/new_core/conf/managed-schema

<!-- 自带分词器 -->
<fieldType name="text_hmm_chinese" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
</fieldType>

自带分词效果(对比IK的词汇量是比自带的多的还支持扩展词汇)

Solr搜索引擎 — 查询命令和两种中文分词使用

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这