1别智、Elasticsearch: 權(quán)威指南 ? 基礎(chǔ)入門 ? 排序與相關(guān)性 ? 什么是相關(guān)性?
1展蒂、一些概念
反向檢索詞在索引中出現(xiàn)的頻率惑朦?頻率越高呢簸,相關(guān)性越低矮台。檢索詞出現(xiàn)在多數(shù)文檔中比出現(xiàn)在少數(shù)文檔中的權(quán)重更低。
字段程度準(zhǔn)則:字段的長度是多少根时?字段越長瘦赫,相關(guān)性越低。檢索詞出現(xiàn)在一個短的 title 要比同樣的詞出現(xiàn)在一個長的content 字段的權(quán)重更大
單個查詢可以聯(lián)合使用 TF/IDF 和其他方式蛤迎,比如短語查詢中檢索詞的距離或者是模糊查詢中的檢索詞相似度确虱。
相關(guān)性并不只是全文本檢索的專利。也適合于 yes|no的字句替裆,匹配 字句越多校辩,相關(guān)性的評分也就越高
如果多條查詢字句被合并為一個復(fù)合查詢語句。比如 bool 查詢辆童,則每個查詢字句計算得出的評分會被合并到總的相關(guān)性的評分中宜咒。
2、理解評分標(biāo)準(zhǔn)
當(dāng)調(diào)試一個復(fù)雜的查詢語句時把鉴,想要理解 _score 究竟是如何計算是比較困難的故黑。ElasticSearch 在每個查詢語句中都有一個Explain 參數(shù),將 Explain 設(shè)為 True 就可以得到更加詳細的信息
get /_search?Explain
{
"query":{ "match":{"tweet":"honeymoon"}}
}
Explain 參數(shù)可以讓返回結(jié)果添加一個 _score 評分得來依據(jù)纸镊。
增加一個 Explain 參數(shù)會為每個匹配到的文檔產(chǎn)生一大堆的額外的內(nèi)容倍阐,但是花時間去理解它是有意義的。如果現(xiàn)在看不明白也沒有關(guān)系——等你需要的時候逗威,再來進行回顧這一節(jié)就行峰搪。下面我們來一點點的了解這塊的知識。
首先凯旭,我們看一下普通查詢返回的元數(shù)據(jù)
{
"_index":"us",
"_type":"tweet",
"_id":"12",
"_score":0.076713204
"_source":{.... trimmed ....}
}
這里加入了該文檔來自于哪個節(jié)點哪個分片上的信息概耻,這對我們是比較有幫助的使套,因為詞頻率和文檔頻率是每個分片中計算出來的,而不是每個索引中:
"shard":1,
"_node":"mzIVYCsqSWCG_M_ZffSs9Q"
然后它提供了 _explanation . 每個入口都包含一個 description 鞠柄、 value侦高、details 字段,它分布告訴你計算的模型厌杜、計算的結(jié)果和任何我們需要的計算細節(jié)
輸出 Explain 結(jié)果代價是十分昂貴的奉呛,它只能用作調(diào)試工具。千萬不要用于生產(chǎn)環(huán)境夯尽。
第一部分是關(guān)于計算的總結(jié):告訴了我們honeymoon 在 tweet 字段中的檢索詞頻率/ 反向文檔頻率或 TF/IDF(這里的文檔是一個內(nèi)部的 ID瞧壮,跟我們沒有關(guān)系,可以忽略)
然后它提供了權(quán)重是如何計算的細節(jié):
檢索詞的頻率
檢索詞 honeymoon
在這個文檔的 tweet 字段中出現(xiàn)的次數(shù)
反向文檔頻率
檢索詞 honeymoon
在索引上所有文檔的 tweet 字段中出現(xiàn)的次數(shù)
字段長度準(zhǔn)則
在這個文檔中匙握,tweet 字段內(nèi)容的長度 -- 內(nèi)容的越長咆槽,值越小
復(fù)雜的查詢語句解釋也非常的復(fù)雜,但是包含的內(nèi)容與上面的例子大致相同圈纺。通過這段信息秦忿,我們可以了解搜索結(jié)果是如何產(chǎn)生的
json 形式的 Explain 描述是難以閱讀的,但是轉(zhuǎn)成YAML 會好很多蛾娶,只需要在參數(shù)中加上 format = yaml
理解文檔時如何被匹配到的
當(dāng)Explain 選項加到某一個文檔上時灯谣, Explain api 會幫助你理解為何這個文檔會被匹配,更重要的是茫叭,一個文檔為何沒有被匹配酬屉。
請求的路徑是:
get /us/tweet/12/_explain
{
"query":{
"bool":{
"filter":{ "term":{"user_id":2}},
"must":{"match":{"tweet":"honeymoon"}}
}
}
}
不只是我們之前看到的充分解釋,我們現(xiàn)在有了一個 description 元素揍愁,它將告訴我們:
"failure to match filter: cache(user_id:[2 to 2])"
也就是我們的 user_id 過濾子句使該文檔不能匹配到。
2杀饵、