Solr搜索

Java

參見上文solr概述 - 簡(jiǎn)書

搜索

Solr搜索參數(shù)介紹

搜索參數(shù)

如圖琅绅,solr基本的查詢參數(shù)如上召川。

q搜索關(guān)鍵詞
q的值就是用戶提交到solr查詢的關(guān)鍵詞霞丧。 類似于在google想搜索solr扔嵌,那么你在google的輸入框中填寫的solr一樣掖桦。q參數(shù)只有一個(gè)作用本昏,高樹solr在計(jì)算返回結(jié)果時(shí)需要考慮那些關(guān)鍵詞。

fq過濾參數(shù)
fq全程是filter query枪汪。這里的過濾是基于字段進(jìn)行過濾的涌穆;利用fq參數(shù),可以限定solr返回的結(jié)果里面雀久,某些字段的值必須是什么宿稀,且fq可以設(shè)置多個(gè)值。比如你在淘寶里搜索男裝赖捌,那么淘寶是不會(huì)返回女裝數(shù)據(jù)給你的祝沸。這里顯然就是淘寶對(duì)商品的某些字段進(jìn)行了限制,使用fq你也可以實(shí)現(xiàn)這樣的效果巡蘸。

說明:關(guān)于這兩個(gè)參數(shù)的設(shè)置問題奋隶,Solr使用者傾向于將用戶輸入的關(guān)鍵詞放入q參數(shù)中,將機(jī)器生成的過濾參器放入fq參數(shù)中[Solr In Action悦荒,Trey Grainger]唯欣。如果同時(shí)設(shè)置了fq和q,那么solr會(huì)先查詢fq搬味,再匹配q境氢。

sort排序參數(shù)
這個(gè)很好理解了吧!solr可以對(duì)搜索結(jié)果根據(jù)某個(gè)字段進(jìn)行排序碰纬。支持升序和降序兩個(gè)操作萍聊,用的時(shí)候設(shè)置字段名 排序方式就可以了。如::price asc::(價(jià)格升序) 或::price desc::(價(jià)格降序)悦析。

start寿桨,rows分頁查詢參數(shù)
返回結(jié)果范圍:[start+rows]。

fl返回字段限制
提交該參數(shù)后强戴,solr返回的結(jié)果只包含fl限制的字段亭螟。

df默認(rèn)搜索字段
df全稱default field,solr在進(jìn)行匹配結(jié)果時(shí)骑歹,q參數(shù)的值默認(rèn)和哪一個(gè)字段進(jìn)行匹配预烙。
好了,來一個(gè)實(shí)例看一下效果:

搜索參數(shù)使用

到這里相信你對(duì)solr搜索有了一個(gè)基本的了解了道媚。
但是由于我們?cè)趯?duì)solr進(jìn)行數(shù)據(jù)索引時(shí)扁掸,使用的是solr默認(rèn)的分詞器翘县,這個(gè)分詞器對(duì)拉丁語系的支持比較好。像中文這種方塊字谴分,solr就比較無力了锈麸。但是solr7以后的版本,都增加了對(duì)中文分詞的支持狸剃,況且還有第三方的解決方案掐隐。接下來我們就來了解一下如何配置中文分詞器狗热,以提升對(duì)中文的搜索效果钞馁。

中文分詞

分詞是什么意思?為什么要進(jìn)行分詞呢匿刮?

對(duì)于solr這種全文本搜索類型的引擎來說僧凰,解決的就是對(duì)文檔內(nèi)容進(jìn)行搜索和匹配。怎么個(gè)匹配法熟丸?相信對(duì)于搜索引擎有所了解的同學(xué)都知道詞元分析和詞元匹配的說法训措,不過不了解也沒關(guān)系,因?yàn)槲乙膊欢?/p>

由于搜索引擎的原理太過于復(fù)雜光羞,這里只能舉個(gè)例子簡(jiǎn)單的說明一下绩鸣。

一個(gè)文檔數(shù)據(jù)庫里某一個(gè)文檔的內(nèi)容如下:
巴菲特說:金錢只是一堆數(shù)字。

對(duì)于這句話纱兑,solr需要把這句話拆分成不同的單詞組成的詞元流呀闻。比如大概和下面差不多的效果:
巴菲特 金錢 數(shù)字 說 一堆

使用solr默認(rèn)的分詞器肯定不能實(shí)現(xiàn)這樣的效果,因?yàn)槔≌Z系和漢字的構(gòu)詞方式全然不同潜慎,因此我們需要為solr配置一個(gè)支持中文分詞的分詞器捡多,來完成上面的工作。

使用內(nèi)置中文分詞器

solr-7.4.0/contrib/analysis-extras/lucene-libs/目錄下有一個(gè)lucene-analyzers-smartcn-7.4.0.jar的文件铐炫,將這個(gè)文件以你最優(yōu)雅的方式拷貝到solr-7.4.0/server/solr-webapp/WEB-INF/lib目錄下垒手,然后重啟使用./solr retart -force重啟solr。

重啟完成后打開solr-7.4.0/server/solr/<your-core-name>/conf/managed-schema文件倒信,并在文件的fieleType區(qū)域添加如下內(nèi)容:

<fieldType name="text_smartcn" 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>

添加之后在solr管理頁面下的 core admin面板中重新加載核心科贬。

我們來驗(yàn)證一下我們添加的中文分詞器效果如何,打開核心的管理面板:


核心管理面板

然后我們可以使用solr提供的分析功能鳖悠,來幫助我們檢驗(yàn)自己定義的分詞器的使用效果榜掌。


分析器的使用

如圖,我們預(yù)期的結(jié)果是:
巴菲特 金錢 數(shù)字 說 一堆

Solr自帶的分詞器得到的結(jié)果是:
巴 菲 特 說 竞穷, 金錢 只是 一 堆 數(shù)字 唐责,

效果很不錯(cuò)了,有木有~~~

使用第三方分詞器

第三方的中文分詞器大部分都是用IKAnalyzer實(shí)現(xiàn)的瘾带,據(jù)說效果比solr自帶的分詞器好鼠哥。

  1. 下載IKAnalyzer所需的依賴包
    ik-analyzer-7.4.jar
  2. 將ik-analyzer-7.4.0.jar文件復(fù)制到solr-7.4.0/server/solr-webapp/WEB-INF/lib目錄下
  3. 打開solr-7.4.0/server/solr/<your-core-name>/conf/managed-schema文件熟菲,并在文件的fieleType區(qū)域添加如下內(nèi)容:
<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>
  1. 重啟solr后reload核心即可

對(duì)比一下分詞結(jié)果:
巴菲特 菲特 說 金錢 一堆 堆 數(shù)字

對(duì)比solr自帶分詞器的結(jié)果,可以看出ik分詞器能夠更準(zhǔn)確的識(shí)別中文詞語朴恳;再看一個(gè)例子:


ik分詞器效果

默認(rèn)搜索字段配置

在solrconfig文件中抄罕,支持對(duì)搜索中df值的配置。具體配置如下:


默認(rèn)搜索字段配置

在solrconfig.xml文件中的requestHandler節(jié)點(diǎn)中于颖,可以看到默認(rèn)的搜索處理器/select配置呆贿,如果有需要更改df和wt默認(rèn)值的需求,開啟配置中注釋的部分進(jìn)行配置即可森渐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末做入,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子同衣,更是在濱河造成了極大的恐慌竟块,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耐齐,死亡現(xiàn)場(chǎng)離奇詭異浪秘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)埠况,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門耸携,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辕翰,你說我怎么就攤上這事夺衍。” “怎么了金蜀?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵刷后,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我渊抄,道長(zhǎng)尝胆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任护桦,我火速辦了婚禮含衔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘二庵。我一直安慰自己贪染,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布催享。 她就那樣靜靜地躺著杭隙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪因妙。 梳的紋絲不亂的頭發(fā)上痰憎,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天票髓,我揣著相機(jī)與錄音,去河邊找鬼铣耘。 笑死洽沟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜗细。 我是一名探鬼主播裆操,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼炉媒!你這毒婦竟也來了踪区?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤橱野,失蹤者是張志新(化名)和其女友劉穎朽缴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體水援,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年茅郎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜗元。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡系冗,死狀恐怖奕扣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掌敬,我是刑警寧澤惯豆,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站奔害,受9級(jí)特大地震影響楷兽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜华临,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一芯杀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雅潭,春花似錦揭厚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椿浓,卻和暖如春太援,著一層夾襖步出監(jiān)牢的瞬間漾岳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工粉寞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尼荆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓唧垦,卻偏偏與公主長(zhǎng)得像捅儒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子振亮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容