首先說說 dismax這個功能,它是基於lucene的DisjunctionMaxQuery去 擴展的,就是說,實際上用到的就是DisjunctionMaxQuery的這個查詢類。查詢api,能夠知道是 對查詢的幾個域中,取最大的打分,而不是想boolean查詢那樣,要幾個域的查詢的分數疊加。 apache
一、q.alt, 沒有看明白 api
二、qf對默認查詢增長權重比值,好比:fieldOne^1.9 fieldTwo fieldThree^5 ,值越大權重越大 函數
也能夠是 spa
一、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 相加,獲得最後打分 索引
二、qf 文檔
三、mm , mm=2 就是有兩個符合搜索的詞 就返回改條 .對應着lucene的類BooleanScorer2 get
eg: it
性別:女 MUST
年齡:<25 SHOULD
胸圍: >C should
收入: >10000 should io
要符合兩個條件纔會被 hit,要不直接去掉
五、ps,phrase slop, 坡度 ,相同於 編輯距離的值,
eg: document:"周杰倫「,query:」杰倫周「,這兩個詞,若是用 phrasequery,但 slop=2的時候,搜索不出來,當,slop=3的時候,能夠搜索出來
六、qs
七、
八、tie:DisjunctionMaxQuery q = new DisjunctionMaxQuery(tie);
九、bq,就是boost queries ,bq參數能夠用來指定多個查詢,相似於automatic phrase boost
當是多個查詢的時候,就是 BooleanClause.Occur.SHOULD查詢,只有僅有一個查詢而且
if (1.0f == f.getBoost() && f instanceof BooleanQuery) 的時候,纔是保留着原先的查詢。
具體見:DisMaxQParser
十、uf
隨便說一下 各個Query的不一樣作法
一、TermQuery,只是簡單的按term 去查詢?
二、BooleanQuery,布爾查詢 ,與或?
三、RangeQuery
四、PrefixQuery就是使用前綴來進行查找的。
五、多關鍵字的搜索—PhraseQuery
六、FuzzyQuery是一種模糊查詢,它能夠簡單地識別兩個相近的詞語。
七、使用通配符搜索—WildcardQuery
八、DisjunctionMaxQuery