Solr搜索引擎 — 查詢命令和兩種中文分詞使用

已經(jīng)和mysql建立好了關(guān)聯(lián),可以查詢和更新mysql的數(shù)據(jù)量,接下來就是進(jìn)階的使用方式了

附上:

喵了個(gè)咪的博客:http://w-blog.cn

Solr官網(wǎng):http://lucene.apache.org/solr/

PS:8.0.0版本已經(jīng)發(fā)布,本文使用此時(shí)較為穩(wěn)定的7.7.1版本

一,查詢命令的基本使用

基本查詢方式

  q 查詢的關(guān)鍵字,此參數(shù)最為重要,例如,q=id:1,默認(rèn)為q=*:*,
  fl 指定返回哪些字段,用逗號(hào)或空格分隔,注意:字段區(qū)分大小寫,例如,fl= id,title,sort
  start 返回結(jié)果的第幾條記錄開始,一般分頁用,默認(rèn)0開始
  rows 指定返回結(jié)果最多有多少條記錄,默認(rèn)值為 10,配合start實(shí)現(xiàn)分頁
  sort 排序方式,例如id desc 表示按照 “id” 降序
  wt (writer type)指定輸出格式,有 xml, json, php等
  fq (filter query)過慮查詢,提供一個(gè)可選的篩選器查詢。返回在q查詢符合結(jié)果中同時(shí)符合的fq條件的查詢結(jié)果,例如:q=id:1&fq=sort:[1 TO 5],找關(guān)鍵字id為1 的,并且sort是1到5之間的。
  df 默認(rèn)的查詢字段,一般默認(rèn)指定。
  qt (query type)指定那個(gè)類型來處理查詢請(qǐng)求,一般不用指定,默認(rèn)是standard。
  indent 返回的結(jié)果是否縮進(jìn),默認(rèn)關(guān)閉,用 indent=true|on 開啟,一般調(diào)試json,php,phps,ruby輸出才有必要用這個(gè)參數(shù)。
  version 查詢語法的版本,建議不使用它,由服務(wù)器指定默認(rèn)值。

檢索運(yùn)算符

  “:” 指定字段查指定值,如返回所有值*:*
  “?” 表示單個(gè)任意字符的通配
  “*” 表示多個(gè)任意字符的通配(不能在檢索的項(xiàng)開始使用*或者?符號(hào))
  “~” 表示模糊檢索,如檢索拼寫類似于”roam”的項(xiàng)這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。
  AND、|| 布爾操作符
  OR、&& 布爾操作符
  NOT、!、-(排除操作符不能單獨(dú)與項(xiàng)使用構(gòu)成查詢)
  “+” 存在操作符,要求符號(hào)”+”后的項(xiàng)必須在文檔相應(yīng)的域中存在2
  ( ) 用于構(gòu)成子查詢
  [] 包含范圍檢索,如檢索某時(shí)間段記錄,包含頭尾,date:[201507 TO 201510]
  {} 不包含范圍檢索,如檢索某時(shí)間段記錄,不包含頭尾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對(duì)應(yīng)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

分詞效果

這個(gè)時(shí)候去查詢數(shù)據(jù)還是無法實(shí)現(xiàn)分詞查詢,需要重新初始化數(shù)據(jù)

查詢時(shí)候就有分詞的效果了

三、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>

自帶分詞效果(對(duì)比IK的詞匯量是比自帶的多的還支持?jǐn)U展詞匯)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容