1. 程式人生 > >solr之如何合理的控制solr查詢的命中的數量?

solr之如何合理的控制solr查詢的命中的數量?

在solr裡面,如何合理的控制的命中的數量? 

在一些日常的文章中或一些資訊中,都有一些高頻詞,而這些高頻詞,在參與查詢時,往往會造成,大量的結果集命中。 
什麼意思呢? 舉個例子,假如我們現在做的是飯店的搜尋,在我們的索引庫裡有一列name這個field,這裡面大部分都是xxx飯店,假如你搜索的時候搜一個xxx飯店,會被分詞成: 
xxx 
飯店 
然後xxx命中只有10條結果集, 而飯店確命中了20萬結果集,這麼以來總結果可能就有20多萬條,造成了大量的資料命中,一方面顯示了資訊的豐富性,另一方面可能給使用者造成太多的困惑。 
我們分析下在全文檢索中兩個重要的概念 

查準率 

召全率 

在Lucene,Solr和ElasticSearch裡面一般的分詞的查詢結果都會對這兩個率做一個最好效果的調配,而這個預設的相關性評分規則就是: 

相關性評分最高的排在前面,也就是查準的體現 
相關性低的排在後面,也就是查全的體現 
當然上面的結論,並不是百分百正確的,因為由於Lucene底層的設計,可能會導致一些奇怪的效果,就是最精確的沒有排在最前面,這種問題大概只有10%的概率,我們可以索引兩個欄位,來避免這種問題,一個分詞,一個不分詞,查詢時候,可以一起查詢兩個欄位. 

回到剛才飯店的那個問題,假如現在有想要搜尋一個: 
北京車道溝北里小莊十里香飯店,分詞後的情況如下: 

車道 
溝 
北里 
小莊 
十里 
香 
飯店 

注意,在整個索引庫裡面大部分要搜尋的資料都含有北京和飯店兩個詞,所以這一下幾乎會索引裡面的所有資料都查詢出來了,雖然查詢排名還可以,但命中量太大了,超過4頁之後幾乎都是北京xxxx飯店了,跟主題的搜尋沒啥關係,所以我們可以採取一些策略來避免這種情況: 
solr預設的搜尋策略,是分詞後的term的or的關係,最後結果集全部返回,如果我們改成and,那就是精確匹配了,但是有一點就是,如果是精確的匹配,某些時候使用者輸入的不完整的詞就失去了全文檢索的含義了,所以我們要採取一種綜合的策略,既保證查準,又能保證召回,這樣才能實現? 

這個東西直接用我們的全文檢索框架是沒法實現的,有個思路不錯,就是我們對要搜尋的詞,提取出句子的主幹,然後主幹部分在檢索時,是必須要命中的,如果不命中,就算該條資料與查詢的詞,相關性不大,這個方法不錯,但前提是你如何在大規模的資料裡面精準的提出這些精確的主幹詞呢? 使用機器學習或者是文字挖掘? 答案是肯定能做,只是需要另外設計了,這是最好的解決搜尋的命中數量太多的辦法。 

還有一個辦法,是一種治標不治本的辦法,比較容易實現,就是限制每次分詞後最大匹配term的個數,也就是像 

車道 
溝 
北里 
小莊 
十里 
香 
飯店 
必須命中3個或更多的term,我才認為相關性更大,或者有一個百分比來限制80%以上的命中,就算此條記錄不錯。這個使用solr的edismax可以解決,方法如下: 

使用edismax,在q裡寫完 
name:北京xxxxx飯店後 
在Raw Query Paramters引數裡面寫 
defType=edismax&mm=80%25 

然後查詢即可,mm是最小匹配的數量,可以是個固定的值,也可也是個百分比,因為散仙是在solr的admin頁面查詢,所以需要把%替換成url字元%25,這樣才能正確傳送到solr的服務端 具體的資料請看: 

相關推薦

solr如何合理控制solr查詢命中數量

在solr裡面,如何合理的控制的命中的數量?  在一些日常的文章中或一些資訊中,都有一些高頻詞,而這些高頻詞,在參與查詢時,往往會造成,大量的結果集命中。  什麼意思呢? 舉個例子,假如我們現在做的是飯店的搜尋,在我們的索引庫裡有一列name這個field,這裡面大部分都是xxx飯店,假如你搜索的時候搜一個x

Solr精確、匹配、排序、模糊查詢-yellowcong

Solr查詢資料,其實下面一堆的引數,我也沒有做測試,只是轉載過來了,我大概只用了高亮、排序、查詢、分頁,其他的好像沒有用過,以後用再來查 一.基本查詢 引數意義 q 查詢的關鍵字,此引數最為重要,例如,q=id:1,預設為q=:, fl 指定返回哪些欄位,用逗

Solr查詢索引。

        Solr在不修改任務配置的情況下就可以使用查詢功能,在web專案中應用可以直接URL進行訪問Solr伺服器例如: http://localhost:8080/solr/collection1/select?q=*%3A*&wt=xml&in

基於Solr的多表join查詢加速方法

bit 增量 一輪 send 阿裏雲 做了 activity 總結 周期 前言 DT時代對平臺或商家來說最有價值的就是數據了,在大數據時代數據呈現出數據量大,數據的維度多的特點,用戶會使用多維度隨意組合條件快速召回數據。數據處理業務場景需要實時性,需要能夠快速精準的獲得到需

Quick start Solr 安裝指南(一)

align yum 文件夾 CP 基礎 成功 引擎 全文搜索 回車 Solr簡介 1. 企業站內搜索技術選型在一些大型門戶網站、電子商務網站等都需要站內搜索功能,使用傳統的數據庫查詢方式實現搜索無法滿足一些高級的搜索需求,比如:搜索速度要快、搜索結果按相關度排序、搜索內容

Solr介紹(一)

1.什麼是solr?         Solr是apache的一個頂級開源專案,使用java開發,基於lucene的全文檢索伺服器。 2.Solr是如何實現全文檢索的呢?     索引流程:solr客戶端(瀏覽器、

solrmysql全量同步與增量同步

一、solr管理員命令 二、案例實戰說明(全量同步與增量同步) 一、solr管理員命令 我們在生產環境時,需要管理員維護solr伺服器的資料資訊,,那麼這裡有3種主要手段: 1.curl方式 curl http://localhost:8080/solr/updat

solr的多條件組合查詢solr的範圍查詢

存在問題:為了減輕資料庫的訪問壓力,往往我們將必要的資料儲存到solr中,並給部分欄位建立索引,此時在查詢資料的時候可以通過solr查詢,這樣就大大的提高了查詢的效率。但是以下這個問題困擾很多初學者。包括博主我自己,那就是solr的多條件組合查詢和solr的範圍查詢,在研究

solrpositionIncrementGap

positionIncrementGap這個特性針對multiValue欄位使用,用於設定多值資料間的間隔,常見用法如下:     <fieldType name="text_general_pos0" class="solr.TextField" position

Solr——整合mmseg4j中文分詞庫

在上一篇博文《Solr之——整合Tomcat》中,我們介紹了Solr與Tomcat的整合方式,還沒有閱讀上一篇博文的朋友,請先閱讀上一篇博文《Solr之——整合Tomcat》,本文是在上一篇博文的基礎上整合mmseg4j中文分詞詞庫的。下面我們一起來實現Solr與mmse

SolrSolrCloud配置mmseg4j同義詞

前提,已經安裝配置好Tomcat與Solr,並且配置好mmseg4j中文分詞。 1.修改$SOLR_HOME/collection1/conf/schema.xml 在fields節點下面的mmseg4j分詞器相關配置修改為類似於如下的內容: <fieldType

環境搭建window下solr配置

1.下載solr--http://archive.apache.org/dist/lucene/solr/和IK Analyzer--http://code.google.com/p/ik-analyzer/downloads 2.複製E:\solr\solr-4.10.

solr多個core的查詢

由於專案的關係solr改成了solr4.7.2。在多個core都是查詢表是很簡單:http://127.0.0.1:8080/solr/db/select?q=%E5%88%86%E5%B8%83%E5%BC%8F&wt=json&indent=true&a

Solr入門案例-yellowcong

Solr入門案例,通過java實現查詢,新增,刪除solr的索引的操作,特別需要注意的一點是,solr的jar版本需要通過伺服器版本一致,不然又有錯誤問題,同時還要注意依賴包的問題。 新增索引 新增索引的欄位,必須是在schema.xml 中配置了,

Solr——solr5.2.1環境搭建

1、下載Tomcat與solr-5.2.1並解壓,Tomcat解壓後的目錄為:E:\apache-tomcat-7.0.62,solr解壓後的目錄為:E:\solr-5.2.1 2、將solr部署到Tomcat中   1)、將E:\solr-5.2.1\example\e

Solr分組統計。

        本文實現分組統計的方法是使用了Solr的Facet元件,Facet元件是Solr預設整合的一個元件,Facet元件是Solr預設整合的一個元件。 Facet簡介         Facet是solr的高階搜尋功能之一,可以給使用者提供更友好的搜尋體驗。在搜尋

Tomcat原始碼閱讀閉鎖的實現與連線數量控制

嗯,今天其實在看HtttpProcessor的實現,但是突然想到了以前在看poller的時候看到了有閉鎖,用於控制當前connector的連線數量,嗯,那就順便把這部分來看了。。。 在Tomcat中,通過繼承AbstractQueuedSynchronizer來實現了自己的

Solr配置suggest功能

幸運的是 solr 也提供了類似的功能,在該功能的基礎上,配合 jQuery 或 kissy 的自動完成元件就可以實現類似上面的功能。 啟動該功能的過程大體如下: suggest 的功能依賴拼寫元件,solr_home/data 目錄下會有一個 spellchecker 目錄,該目錄用於存放 sugge

solr-hbase二級索引及查詢解決方案(一)

最近要搞一個查詢功能,是把hbase中的資料方便的查詢出來.之前根據rowkey的查詢方式,儘管有針對性設計過rowkey,有字首查詢,字尾查詢,以及正則查詢,但是實際上不夠用. 參考了網路上的設計,建立二級索引是比較好的思路.於是就以solr儲存hbase

solr專題三】Solr常見異常

1、RemoteSolrException: Expected mime type application/octet-stream but got text/html 現象: SLF4J: Failed to load class "org.slf4j.impl.Sta