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

已經和mysql創建好了關聯,能夠查詢和更新mysql的數據量,接下來就是進階的使用方式了php

附上:mysql

喵了個咪的博客:http://w-blog.cngit

Solr官網:http://lucene.apache.org/solr/github

PS:8.0.0版本已經發布,本文使用此時較爲穩定的7.7.1版本web

一,查詢命令的基本使用

基本查詢方式sql

  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 查詢語法的版本,建議不使用它,由服務器指定默認值。

檢索運算符apache

  「:」 指定字段查指定值,如返回全部值*:*
  「?」 表示單個任意字符的通配
  「*」 表示多個任意字符的通配(不能在檢索的項開始使用*或者?符號)
  「~」 表示模糊檢索,如檢索拼寫相似於」roam」的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回類似度在0.8以上的記錄。
  AND、|| 布爾操做符
  OR、&& 布爾操做符
  NOT、!、-(排除操做符不能單獨與項使用構成查詢)
  「+」 存在操做符,要求符號」+」後的項必須在文檔相應的域中存在²
  ( ) 用於構成子查詢
  [] 包含範圍檢索,如檢索某時間段記錄,包含頭尾,date:[201507 TO 201510]
  {} 不包含範圍檢索,如檢索某時間段記錄,不包含頭尾date:{201507 TO 201510}

2、IK中文分詞

下載版本匹配的IK分詞jar包json

> 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

> 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類型ruby

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

而後重啓solr

> solr restart -force

分詞效果

這個時候去查詢數據仍是沒法實現分詞查詢,須要從新初始化數據

查詢時候就有分詞的效果了

3、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的詞彙量是比自帶的多的還支持擴展詞彙)

相關文章
相關標籤/搜索