天天看點

solr:關于dismax的使用情況(轉:https://my.oschina.net/momohuang/blog/145379)

首先說說 dismax這個功能,它是基于lucene的disjunctionmaxquery去 擴充的,就是說,實際上用到的就是disjunctionmaxquery的這個查詢類。查詢api,可以知道是 對查詢的幾個域中,取最大的打分,而不是想boolean查詢那樣,要幾個域的查詢的分數疊加。

solr:關于dismax的使用情況(轉:https://my.oschina.net/momohuang/blog/145379)

1、q.alt, 沒有看明白

2、qf對預設查詢增權重重比值,比如:fieldone^1.9 fieldtwo fieldthree^5 ,值越大權重越大

也可以是  

1、bf内字段必須是索引的,該出填寫的是查詢函數   。提供一個強大的功能就是使用使用者設定的公式來對文檔的score進行計算。這裡所說的公式也就是solr的function queries,使用bf參數來操作score。edismax支援boost參數來進行function query。可以使用bf或boost多次。bf的函數檢視solr api文檔http://wiki.apache.org/solr/functionquery

最終的排序打分,可以根據 bf打分與 lucene的sorce 相加,得到最後打分

2、qf

3、mm , mm=2 就是有兩個符合搜尋的詞 就傳回改條 .對應着lucene的類booleanscorer2

eg:

性别:女  must

年齡:<25  should

胸圍: >c should

收入: >10000 should

要符合兩個條件才會被 hit,要不直接去掉

4、pf查詢字段, 就是phrase fields的縮寫, 這樣在schema不用制定預設字段

5、ps,phrase slop, 坡度 ,相同于 編輯距離的值,

eg: document:"周傑倫“,query:”傑倫周“,這兩個詞,如果用 phrasequery,但 slop=2的時候,搜尋不出來,當,slop=3的時候,可以搜尋出來

6、qs

7、

8、tie:disjunctionmaxquery q = new disjunctionmaxquery(tie);

 這個查詢是相當于布爾查詢的  

不過裡面的關系隻能是should  

 最後的分數不是相加,而是取最大值 

9、bq,就是boost queries ,bq參數可以用來指定多個查詢,類似于automatic phrase boost

當是多個查詢的時候,就是 booleanclause.occur.should查詢,隻有僅有一個查詢并且

 if (1.0f == f.getboost() && f instanceof booleanquery)  的時候,才是保留着原先的查詢。

具體見:dismaxqparser

10、uf

随便說一下 各個query的不同做法

1、termquery,隻是簡單的按term 去查詢?

2、booleanquery,布爾查詢 ,與或?

3、rangequery

4、prefixquery就是使用字首來進行查找的。

5、多關鍵字的搜尋—phrasequery

6、fuzzyquery是一種模糊查詢,它可以簡單地識别兩個相近的詞語。

7、使用通配符搜尋—wildcardquery

8、disjunctionmaxquery

繼續閱讀