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