科技未來網(wǎng)站建設(shè)東莞百度快照優(yōu)化排名
分類
query查詢分類
總體規(guī)律就是邏輯性的,從外層的你干嘛,到下一層的查詢類型,再到下一層的查詢字段(如果需要的話)和然后是查詢內(nèi)容
查詢所有
語法
get /索引庫名/_serarch
{"query":{"查詢條件":{//如果是查詢所有match_all,不需要條件,否則以下不能為空}}
}
查詢所有案例
// 查詢所有
GET /indexName/_search
{"query": {"match_all": {}}
}
全文檢索查詢
match查詢
GET /indexName/_search
{"query": {"match": {"FIELD(字段)": "TEXT(查詢內(nèi)容)"}}
}
查詢多個字段的multi_match
GET /indexName/_search
{"query": {"multi_match": {//查詢多個"query": "TEXT","fields": ["FIELD1", " FIELD12"]}}
}
精確查詢
查詢keyword,數(shù)值,日期等類型字段(精確值),不會對搜索條件進行分詞
term:詞條
// term查詢
GET /indexName/_search
{"query": {"term": {"FIELD": {"value(這是固定的)": "VALUE(這是你要搜的詞條)"}}}
}
range:范圍
gt是大于(不等于),gte是大于等于(lte同理)
// range查詢
GET /indexName/_search
{"query": {"range": {"FIELD": {"gte": 10,"lte": 20}}}
}
地理查詢
根據(jù)經(jīng)緯度查詢(地理上進行查詢附近的酒店/出租車)
geo_bounding_box經(jīng)緯度范圍查詢
// geo_bounding_box查詢
GET /indexName/_search
{"query": {"geo_bounding_box": {"FIELD": {"top_left": {"lat": 31.1,"lon": 121.5},"bottom_right": {"lat": 30.9,"lon": 121.7}}}}
}
geo_distance查詢到指定中心點的舉例小于某個距離值的所有位置
// geo_distance 查詢
GET /indexName/_search
{"query": {"geo_distance": {"distance": "15km","FIELD": "31.21,121.5"}}
}
復合查詢
將簡單的查詢組合起來,實現(xiàn)復雜的搜索邏輯
fuction score:算分函數(shù)查詢,打分機制
tf算法
TF(詞條頻率) = 詞條出現(xiàn)次數(shù)/文檔中詞條總數(shù)
TF-IDF算法
IDF(逆文檔頻率) = Log(文檔總數(shù)/包含詞條的文檔總數(shù))
score = ∑_i^n?TF(詞條頻率) ? IDF(逆文檔頻率)
BM25算法
Score(Q,d) = ∑_i^n?log(1+ N ?n+0.5/n+0.5)? f_i /f_i+ k_1 ? (1 ?b+ b ? dl/avgdl)
復合查詢案例
GET /hotel/_search
{"query": {"function_score": {"query": { "match": {"all": "外灘"} },//原始查詢條件,搜索文檔并根據(jù)相關(guān)性打分(query score"functions": [{"filter": {"term": {"id": "1"}},//過濾條件,符合條件的文檔才會被重新算分"weight": 10/*算分函數(shù),算分函數(shù)的結(jié)果稱為function score ,將來會與query score運算,得到新算分,常見的算分函數(shù)有:weight:給一個常量值,作為函數(shù)結(jié)果(function score)field_value_factor:用文檔中的某個字段值作為函數(shù)結(jié)果random_score:隨機生成一個值,作為函數(shù)結(jié)果script_score:自定義計算公式,公式結(jié)果作為函數(shù)結(jié)果*/}],"boost_mode": "multiply"/*加權(quán)模式,定義function score與query score的運算方式,包括:multiply:兩者相乘。默認就是這個replace:用function score 替換 query score其它:sum、avg、max、min*/}}
}
案例:給如家增加權(quán)重
GET /hotel/_search
{"query": {"function_score": {"query": {// 某查詢條件 },"functions": [ // 算分函數(shù){"filter": { // 滿足的條件,品牌必須是如家"term": {"brand": "如家"}},"weight": 2 // 算分權(quán)重為2}],"boost_mode": "sum"}}
}
function score query定義的三要素是什么?
-
過濾條件:哪些文檔要加分
-
算分函數(shù):如何計算function score
-
加權(quán)方式:function score 與 query score如何運算