天天看點

查詢問題---queryparse深入了解

查詢問題,最直接的回報就是頁面出來的結果。

然後牽扯到的問題就一步一步深入了。

第一層:queryparse,其中關聯分詞,關聯booleanquery or

phrasequery,關聯boost。。。。

第二層:排序了,關聯排序的政策、排序的得分公式

第三層:各種轉換、過濾、篩選後的頁面結果

這裡重點将queryparse的問題。

對于boolean查詢,可以完成細粒度的and

or,但是,會損失查詢term之間的關聯關系,例如不能直接反應term直接的距離關系。例如

上架寶貝,分詞是上架|寶貝,boolean查詢可能對上架、寶貝都有結果,但是,上架寶貝挨着的不一定靠前。因為booleanquery

直接的形式,得分是各次元和。

對于phrasequery,顧名思義短語查詢,更符合“搜尋用語”特征,輸入的是什麼就搜尋什麼,隻過濾停用詞、非term詞,資訊損失相對較少,同時保留term之間關聯關系。當然有擴充那就是“智能”了。phrasequery既然是分詞後的多詞組合,分詞不可避免丢失中間某些單字,進而嚴格的“精準”去搜,導緻有時候沒有結果。

使用者轉為希望 上架寶貝,上架、寶貝都有結果,并且上架寶貝挨着的靠前,也有甚至了解

上架優先、其次寶貝、其次上架寶貝。衆口難調!

各種queryparse就是本着靈活性、資訊不失真(當然都是靠人為的幹擾了,強制的boost或者改寫)去了解使用者輸入串。dismaqueryparse相對stardqueryparse最大的不同是,前者得分是求max,後者得分是求和。前者是多域聯合,域之間的關聯兼顧,而後者忽略了域之間的關聯性。

采取booleanquery,需要schema中配置

<fieldtype name="text" class="solr.textfield" positionincrementgap="100" >  

solrconfig中配置

<lucenematchversion>lucene_34</lucenematchversion>

//

更多資訊請參考連結

<a href="http://solr.pl/en/2010/07/14/solr-and-phrasequery-phrase-bonus-in-query-stage/">http://solr.pl/en/2010/07/14/solr-and-phrasequery-phrase-bonus-in-query-stage/</a>

<a href="http://wiki.apache.org/solr/dismaxqparserplugin">http://wiki.apache.org/solr/dismaxqparserplugin</a>

另外,booleanquery與phrasequery的選擇,建議優先使用phrasequery。

繼續閱讀