solr:关于dismax的使用情况(转:https://my.oschina.net/momohuang/blog/145379)
首先說說 dismax這個(gè)功能,它是基于lucene的DisjunctionMaxQuery去 擴(kuò)展的,就是說,實(shí)際上用到的就是DisjunctionMaxQuery的這個(gè)查詢類。查詢api,可以知道是 對查詢的幾個(gè)域中,取最大的打分,而不是想boolean查詢那樣,要幾個(gè)域的查詢的分?jǐn)?shù)疊加。
1、q.alt, 沒有看明白
2、qf對默認(rèn)查詢增加權(quán)重比值,比如:fieldOne^1.9 fieldTwo fieldThree^5 ,值越大權(quán)重越大
也可以是 ?
1、bf內(nèi)字段必須是索引的,該出填寫的是查詢函數(shù) ? 。提供一個(gè)強(qiáng)大的功能就是使用用戶設(shè)置的公式來對文檔的score進(jìn)行計(jì)算。這里所說的公式也就是solr的function queries,使用bf參數(shù)來操作score。edismax支持boost參數(shù)來進(jìn)行function query。可以使用bf或boost多次。bf的函數(shù)查看solr api文檔http://wiki.apache.org/solr/FunctionQuery
最終的排序打分,可以根據(jù) bf打分與 lucene的sorce 相加,得到最后打分
2、qf
3、mm ,?mm=2?就是有兩個(gè)符合搜索的詞?就返回改條 .對應(yīng)著lucene的類BooleanScorer2
eg:
性別:女 ?MUST
年齡:<25 ?SHOULD
胸圍: >C should
收入: >10000 should
要符合兩個(gè)條件才會被 hit,要不直接去掉
4、pf查詢字段, ? 就是phrase fields的縮寫, ? 這樣在schema不用制定默認(rèn)字段
5、ps,phrase slop, 坡度 ,相同于 編輯距離的值,
eg: document:"周杰倫“,query:”杰倫周“,這兩個(gè)詞,如果用 phrasequery,但 slop=2的時(shí)候,搜索不出來,當(dāng),slop=3的時(shí)候,可以搜索出來
6、qs
7、
8、tie:DisjunctionMaxQuery q = new DisjunctionMaxQuery(tie);
這個(gè)查詢是相當(dāng)于布爾查詢的??
不過里面的關(guān)系只能是should??
?最后的分?jǐn)?shù)不是相加,而是取最大值?
9、bq,就是boost queries ,bq參數(shù)可以用來指定多個(gè)查詢,類似于automatic phrase boost
當(dāng)是多個(gè)查詢的時(shí)候,就是 BooleanClause.Occur.SHOULD查詢,只有僅有一個(gè)查詢并且
?if (1.0f == f.getBoost() && f instanceof BooleanQuery) ?的時(shí)候,才是保留著原先的查詢。
具體見:DisMaxQParser
10、uf
隨便說一下 各個(gè)Query的不同做法
1、TermQuery,只是簡單的按term 去查詢?
2、BooleanQuery,布爾查詢 ,與或?
3、RangeQuery
4、PrefixQuery就是使用前綴來進(jìn)行查找的。
5、多關(guān)鍵字的搜索—PhraseQuery
6、FuzzyQuery是一種模糊查詢,它可以簡單地識別兩個(gè)相近的詞語。
7、使用通配符搜索—WildcardQuery
8、DisjunctionMaxQuery
總結(jié)
以上是生活随笔為你收集整理的solr:关于dismax的使用情况(转:https://my.oschina.net/momohuang/blog/145379)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会议活动适合做互动吗?适合什么样的互动形
- 下一篇: solr 自定义 dismax查询方式