很多寫說明文件,沒有總結寫開頭。因為文件內容又很多,你看到後面就忘記前面,沒有形成結構化知識。這樣知識在大腦裡是離散的,不完整,不準確的。
所以我的文章都是把結論寫最開始,或者要說的全部內容用一句話寫在最開始。你知道了可以不用看,不知道,可以一眼知道接下來學到什麼。
當你看到後面,不記得前面了,回到最開始一句話,大腦就會統領全域性,形成最準確和系統性的知識。
我們只能按大腦習慣的學習知識,不可違背大腦的習慣學習,不然只會事倍功半,甚至於學過就忘。
query context 查詢上下文
這種語句在執行時既要計算文件是否匹配,還要計算文件相對於其他文件的匹配度有多高,匹配度越高,_score
分數就越高
filter context 過濾上下文
過濾上下文中的語句在執行時只關心文件是否和查詢匹配,不會計算匹配度,也就是得分。
也就是你寫dsl(es 查詢語法語言)語句時,可以用的下一級字段例如 }}
match query
: 知道分詞器的存在,會對filed進行分詞操作,然後再查詢
match_all
: 查詢所有文件
multi_match
: 可以指定多個字段
match_phrase
: 短語匹配查詢,elasticsearch引擎首先分析(analyze)查詢字串,從分析後的文字中構建短語查詢,這意味著必須匹配短語中的所有分詞。
#1、 查詢年齡為3的(命中:id = 1)
get student/_search
}}#2、查詢興趣裡包含'演戲'的 (命中 id = 2,5,4)
get student/_search
}}#這裡只要interests包含'演戲','演','戲'的都會命中
#3、查詢索引所有文件 (命中 id = 1,2,3,4,5)
get student/_search
}}#4、查詢name和address包含'德' (命中 id = 2)
get student/_search
}}#說明 這裡文件id為4的address為'德州',應該也包含'德',但卻沒有被命中,原因是我們索引結構中,address屬性是乙個keyword型別,它是需要完全匹配,而不是包含的關係。
#如果這裡query為'德州'就可以命中2條資料。
#5、查詢興趣裡包含'演員'的 (命中 無)
get student/_search
}}# 這裡和match的區別是這裡是真正包含'演員',而不是只要滿足其中乙個字就會被模糊命中
term query
: 會去倒排索引中尋找確切的term,它並不知道分詞器的存在。這種查詢適合keyword 、numeric、date。
get student/_search
}}#如果僅檢索'香'那是無法命中的,因為keyword需要完全匹配才能命中
#2、查詢位址等於"香港"或"北京"的 (命中: id =2,3,5)
get student/_search
}}range
: 實現範圍查詢
include_lower
: 是否包含範圍的左邊界,預設是true
include_upper
: 是否包含範圍的右邊界,預設是true
#2、查詢年紀18到28 (命中 id = 2,3)
get student/_search}}
}
允許使用萬用字元* 和 ?來進行查詢
*
代表0個或多個字元
?
代表任意乙個字元
#1、查詢姓名'徐'開頭的 (命中 id = 1)
get student/_search
}}
模糊查詢可以在match和 multi-match查詢中使用以便解決拼寫的錯誤,模糊度是基於levenshteindistance計算與原單詞的距離。使用如下:
get student/_search}}
}
filter是不計算相關性的,同時可以cache。因此,filter速度要快於query
。
#1、獲取年齡為3的 (命中 id = 1)
get student/_search
}}#2、查詢年紀為3或者63的 (命中 id = 1,4)
get student/_search
}}
有:bool query
(布林查詢)、boosting query
(提高查詢)、constant_score
(固定分數查詢)、dis_max
(最佳匹配查詢)、function_score
(函式查詢)
1.布林查詢 "query":"bool"
# must: 必須匹配。貢獻算分
# must_not:過濾子句,必須不能匹配,但不貢獻算分
# should: 選擇性匹配,至少滿足一條。貢獻算分
# filter: 過濾子句,必須匹配,但不貢獻算分 在filter元素下指定的查詢對評分沒有影響 , 評分 返回為0。分數僅受已指定查詢的影響。
post _search
},"filter":
},"must_not" : }},
"should" : [},}
],"minimum_should_match" : 1,
"boost" : 1.0
}}}
在上面的復合查詢我們可以通過must_not+must
先剔除不想匹配的文件,再獲取匹配的文件,但是有一種場景就是我並不需要完全剔除,而是把需要剔除的那部分文件的分數降低。
# 通過boosting的方式,將3的記錄也納入結果集,只是排名會靠後。(結果 1->2->3)
post news/_search
},"negative":
},"negative_boost": 0.5}}}
"""說明boosting需要搭配三個關鍵字 positive , negative , negative_boost
只有匹配了 positive查詢 的文件才會被包含到結果集中,但是同時匹配了negative查詢 的文件會被降低其相關度,通過將文件原本的_score和negative_boost引數進行
相乘來得到新的_score。因此,negative_boost引數一般小於1.0。在上面的例子中,任何包含了指定負面詞條的文件的_score都會是其原本_score的一半。
"""
就是說就算文件包含了蘋果,但因為包含了樹或者水果那麼我們也會過濾這條文件資訊,因為我們要查的蘋果公司相關資訊,如果你是蘋果樹那對我來講確實是不匹配,
所以直接過濾掉,看是沒啥問題。
但是你想,這樣做是不是太粗暴了,因為乙個文件中包含'蘋果'和'樹'那不代表一定是蘋果樹,而可能是 '蘋果公司組織員工一起去種樹' 那麼這條文件理應出現
而不是直接過濾掉,所以我們就可以用boosting query。就像上面這個例子一樣。
dis_max
: 只是取分數最高的那個query的分數而已。
get /_search
}, }
],"tie_breaker" : 0.7}}
}"""
假設一條文件的'title'查詢得分是 1,'body'查詢得分是1.6。那麼總得分為:1.6+1*0.7 = 2.3。
如果我們去掉"tie_breaker" : 0.7 ,那麼tie_breaker預設為0,那麼這條文件的得分就是 1.6 + 1*0 = 1.6
"""
向量搜尋的計算余弦相似度,就可以用到
},
},}],
"filter": }}},
"script": }}
}}
linux查詢 搜尋字元或檔案
linux下查詢 搜尋相關 規則 pattern 向下查詢pattern匹配字串 pattern 向上查詢pattern匹配字串使用了查詢命令之後,使用如下兩個鍵快速查詢 n 按照同一方向繼續查詢 n 按照反方向查詢 查詢匹配的字串 pattern是需要匹配的字串,例如 abc 查詢abc除此之外,...
搜尋檔案或目錄
which 檢視可執行檔案的位置 例如 which passwd whereis 檢視檔案的位置 b 只找二進位制檔案 m 只找在說明檔案manual路徑下的檔案 s 只找source原始檔 u 沒有說明文件的檔案 從資料庫中查詢 locate 配合資料庫檢視檔案位置 使用locate查詢資料特別快...
Linux搜尋檔案或內容
1 遞迴搜尋檔案內容,如果查詢 hello,world 字串,可以這樣 grep rn hello,world 表示當前目錄所有檔案,也可以是某個檔名 r 是遞迴查詢 n 是顯示行號 r 查詢所有檔案包含子目錄 i 忽略大小寫 2 搜尋檔案 find name pay.html 表示根目錄,也可以自...