ES查詢相關(guān)度的官網(wǎng)連接
1:ElasticSearch的查詢權(quán)重
每個文檔與查詢的相關(guān)度,在全文搜索引擎中不僅需要找到匹配的文檔,還需根據(jù)它們相關(guān)度的高低進行排序。
根據(jù)全文相關(guān)的公式或 相似算法(similarity algorithms) 會將多個因素合并起來,為每個文檔生成一個相關(guān)度評分 _score 。_score 在查詢結(jié)果中有顯示
1:相關(guān)度評分理論
Lucene(或 Elasticsearch)使用 bool(bool model) 查找匹配文檔時,會用一個名為 實用評分函數(shù)的公式來計算相關(guān)度。這個公式借鑒了 詞頻/逆向文檔頻率 和 向量空間模型,同時也加入了一些現(xiàn)代的新特性,如協(xié)調(diào)因子(coordination factor),字段長度歸一化(field length normalization),以及詞或查詢語句權(quán)重提升。
1.1:bool模型
bool 查詢可以接受 must 、 must_not 和 should 參數(shù)下的多個查詢語句,就是and,or,not的意思
下面展示一些 內(nèi)聯(lián)代碼片
。
{
"bool" : {
"must" : [],
"should" : [],
"must_not" : [],
}
}
1.2:詞頻
也就是查詢值在一個字段中出現(xiàn)的次數(shù)。當然也可以禁用詞頻統(tǒng)計: “index_options”: “docs”
"match": {
"title": {
"query": "quick brown fox",
"index_options": "docs"
} }
1.3:字段長度歸一值
字段長度歸一值就是查詢值在結(jié)果中所占長度的比例。占的越多值越大
對于 not_analyzed 字符串字段的歸一值默認是禁用的,而對于 analyzed 字段也可以通過修改字段映射禁用歸一值:禁用"norms": { “enabled”: false }
"match": {
"title": {
"query": "quick brown fox",
"index_options": "docs" ,
"norms": { "enabled": false }
} }
2:查詢時提升相關(guān)度
2.1:boost權(quán)重
我們可以用boost 參數(shù)設(shè)置不同字段配置查詢時的權(quán)重。
1:提升權(quán)重
給boost參數(shù)不同的值,比如1,5,10
"match": {
"title": {
"query": "quick brown fox",
"boost": 2 //使用boost權(quán)重設(shè)置為2,不設(shè)置的默認是1
} }
2:對多索引提升權(quán)重
當在多個索引中搜索時,可以使用參數(shù) indices_boost 來提升整個索引的權(quán)重
get index */search{
"indices_boost": {
"index1": 3,
"index2": 2
}
"query":{}
}
2.2:詞頻統(tǒng)計配置
當我們不關(guān)心檢索詞頻率TF對搜索結(jié)果排序的影響時,可以使用constant_score將查詢語句query或者過濾語句filter包裝起來。我們?nèi)匀豢梢杂胋oost給與權(quán)重
當然也可以禁用詞頻統(tǒng)計: “index_options”: “docs”
{
"query":{
"bool":{
"should": [
{ "constant_score": {
"boost":2,
"query": { "match": { "description": "wifi" }} }},
{ "constant_score": {
"query": { "match": { "description": "garden" }} }},
{ "constant_score": {
"query": { "match": { "description": "pool" }} }}
]
}
}
}
2.3:查詢結(jié)果評分修改:function_score
es提供了一些函數(shù)允許我們對查詢的結(jié)果score評分進行修改,function_score 查詢將查詢query和函數(shù)function包括在內(nèi)。在搜索時,可以將 function_score 查詢與 field_value_factor 結(jié)合使用
field_value_factor :配置字段,最終的查詢的score會由function_score 查詢體的結(jié)果值通過field_value_factor配置字段的值進行協(xié)調(diào)。多用于點贊排名等數(shù)據(jù)。最終值:new_score=old_score*field_value_factor
GET /blogposts/post/_search
{
"query": {
"function_score": {
"query": { //function_scored的查詢體
"multi_match": {
"query": "popularity",
"fields": [ "title", "content" ]
}
},
"functions": [ //function_score的functions函數(shù)
{"random_score": {}}, //functions函數(shù)的參數(shù)1:隨機評分
{"gauss": { //functions函數(shù)的參數(shù)2:gauss中心化展示
"age": {
"origin": "2",
"scale": "1"
}
}
],
"field_value_factor": { //function_score參數(shù)1
"field": "votes" //該字段必須是integer等數(shù)值類型的數(shù)據(jù),常用于點贊數(shù)等字段評分
},
"boost_mode": "sum", //function_score參數(shù)2
"max_boost": 1.5 //function_score參數(shù)3
}
}
}
1:field_value_factor參數(shù)解釋
field:提取該字段的值乘以query的查詢score評分=最終結(jié)果,相等于我們給每個查詢的結(jié)果乘了值的系數(shù)
modifier :為了讓最終結(jié)果減少field值系數(shù)的影響。
missing:如果文檔沒有該字段,則使用該值
factor:對于field字段值的均衡使用后new_score = old_score * log(1 + factor * field-value)
"field_value_factor": {
"field": "interger field" , //該字段必須是integer等數(shù)值類型的數(shù)據(jù),常用于點贊數(shù)等字段評分
"modifier ":"none ", //none (默認狀態(tài))、 log 、 log1p 、 log2p 、 ln 、 ln1p 、 ln2p 、 square 、 sqrt 以及 reciprocal
"missing": 1,
"factor": 1
}
2:max_boost最大值限制
限制field_value_factor 的最大值,只會對函數(shù)的最大值有用,不會對不在函數(shù)內(nèi)的查詢構(gòu)成作用
3:隨機評分制:random_score
當_score評分結(jié)果一致時保證每次的展示結(jié)果都一致。 通過random_score設(shè)置值
"functions": [
{
"random_score": {
"seed": "the users session id" //常用用戶id等保證每個人的結(jié)果一致
}
}
]
4:查詢結(jié)果中心化:gauss
為了保證查詢結(jié)果是我們想要的,我們可以設(shè)定距離,價格等為中心查詢某一范圍的值。讓更合適的值靠近我們的展示。比如美團的展示(以價格,距離排序展示)文章來源:http://www.zghlxwxcb.cn/news/detail-702069.html
"functions": [
{"gauss": {
"age": { //以哪個字段的值進行計算
"origin": "2", //該字段的中心值
"offset": "", //以origin左右偏移多少為中心 :origin±offset 該范圍內(nèi)是1.0評分
"scale": "1" //偏出origin±offset到scale值內(nèi)的評分默認是origin±offset評分值的一半0.5
}
}"weight ":2} //該函數(shù)的權(quán)重系數(shù)
]
3:相似度算法
在設(shè)置索引的mapping時為字段配置屬性
“similarity”: “BM25”文章來源地址http://www.zghlxwxcb.cn/news/detail-702069.html
2:實戰(zhàn)驗證
2.1:插入數(shù)據(jù)
2.2:驗證
到了這里,關(guān)于ElasticSearch的查詢權(quán)重-控制查詢相關(guān)度的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!