四十四 Python分布式爬蟲打造搜尋引擎Scrapy精講—elasticsearch(搜尋引擎)的基本查詢

來源:互聯網
上載者:User

標籤:obb   注意   轉換   分詞   ras   指定欄位   返回   source   pos   


1、elasticsearch(搜尋引擎)的查詢

elasticsearch是功能非常強大的搜尋引擎,使用它的目的就是為了快速的查詢到需要的資料

查詢分類:
  基本查詢:使用elasticsearch內建的查詢條件進行查詢
  組合查詢:把多個查詢條件組合在一起進行複合查詢
  過濾:查詢同時,通過filter條件在不影響打分的情況下篩選資料

 

 

2、elasticsearch(搜尋引擎)建立資料

首先我們先建立索引、表、以及欄位屬性、欄位類型、添加好資料

注意:一般我們中文使用ik_max_word中文分詞解析器,所有在需要分詞建立倒牌索引的欄位都要指定,ik_max_word中文分詞解析器
系統預設不是ik_max_word中文分詞解析器

ik_max_word中文分詞解析器是elasticsearch(搜尋引擎)的一個外掛程式,在elasticsearch安裝目錄的plugins/analysis-ik檔案夾裡,版本為5.1.1

更多說明:https://github.com/medcl/elasticsearch-analysis-ik

說明:

#建立索引(設定欄位類型)#注意:一般我們中文使用ik_max_word中文分詞解析器,所有在需要分詞建立倒牌索引的欄位都要指定,ik_max_word中文分詞解析器#系統預設不是ik_max_word中文分詞解析器PUT jobbole                             #建立索引設定索引名稱{  "mappings": {                         #設定mappings映射欄位類型    "job": {                            #表名稱      "properties": {                   #設定欄位類型        "title":{                       #表名稱          "store": true,                #欄位屬性true表示儲存資料          "type": "text",               #text類型,text類型可以分詞,建立倒排索引          "analyzer": "ik_max_word"     #設定分詞解析器,ik_max_word是一個中文分詞解析器外掛程式        },        "company_name":{                #欄位名稱          "store": true,                #欄位屬性true表示儲存資料          "type": "keyword"             #keyword一般字元串類型,不分詞        },        "desc":{                        #欄位名稱          "type": "text"                #text類型,text類型可以分詞,但是沒有設定分詞解析器,使用系統預設        },        "comments":{                    #欄位名稱          "type": "integer"             #integer數字類型        },        "add_time":{                    #欄位名稱          "type": "date",               #date時間類型          "format":"yyyy-MM-dd"         #yyyy-MM-dd時間格式化        }      }    }  }}
#儲存文檔(相當於資料庫的寫入資料)POST jobbole/job{ "title":"python django 開發工程師", #欄位名稱:值 "company_name":"美團科技有限公司", #欄位名稱:值 "desc":"對django的概念熟悉, 熟悉python基礎知識", #欄位名稱:值 "comments":20, #欄位名稱:值 "add_time":"2017-4-1" #欄位名稱:值}POST jobbole/job{ "title":"python scrapy redis 分布式爬蟲基礎", "company_name":"玉秀科技有限公司", "desc":"對scrapy的概念熟悉, 熟悉redis基礎知識", "comments":5, "add_time":"2017-4-2"}POST jobbole/job{ "title":"elasticsearch打造搜尋引擎", "company_name":"通訊科技有限公司", "desc":"對elasticsearch的概念熟悉", "comments":10, "add_time":"2017-4-3"}POST jobbole/job{ "title":"pyhhon打造Recommendation Engine系統", "company_name":"智能科技有限公司", "desc":"熟悉Recommendation Engine系統演算法", "comments":60, "add_time":"2017-4-4"}

 通過上面可以看到我們建立了索引並且設定好了欄位的屬性、類型、以及分詞解析器,建立了4條資料

 

3、elasticsearch(搜尋引擎)基本查詢

 

 

match查詢【用的最多】
會將我們的搜尋字詞在當前欄位設定的分詞器進行分詞,到當前欄位尋找,匹配度越高排名靠前,如果搜尋字詞是大寫字母會自動轉換成小寫

#match查詢#會將我們的搜尋字詞進行分詞,到指定欄位尋找,匹配度越高排名靠前GET jobbole/job/_search{  "query": {    "match": {      "title": "搜尋引擎"    }  }}

 

 

term查詢
不會將我們的搜尋字詞進行分詞,將搜尋字詞完全符合的查詢

#term查詢#不會將我們的搜尋字詞進行分詞,將搜尋字詞完全符合的查詢GET jobbole/job/_search{  "query": {    "term": {      "title":"搜尋引擎"    }  }}

 

 

terms查詢
傳遞一個數組,將數組裡的詞分別匹配

#terms查詢#傳遞一個數組,將數組裡的詞分別匹配GET jobbole/job/_search{  "query": {    "terms": {      "title":["工程師","django","系統"]    }  }}

 

 

控制查詢的返回數量
  from從第幾條資料開始
  size擷取幾條資料

#控制查詢的返回數量#from從第幾條資料開始#size擷取幾條資料 GET jobbole/job/_search{  "query": {    "match": {      "title": "搜尋引擎"    }  },  "from": 0,  "size": 3}

 

 

match_all查詢,查詢所有資料

#match_all查詢,查詢所有資料GET jobbole/job/_search{  "query": {    "match_all": {}  }}

 

 

match_phrase查詢
短語查詢
短語查詢,會將搜尋字詞分詞,放進一個列表如[python,開發]
然後搜尋的欄位必須滿足列表裡的所有元素,才符合
slop是設定分詞後[python,開發]python 與 開發,之間隔著多少個字元算匹配
佔空間字元數小於slop設定算匹配到,佔空間字元數大於slop設定不匹配

#match_phrase查詢#短語查詢#短語查詢,會將搜尋字詞分詞,放進一個列表如[python,開發]#然後搜尋的欄位必須滿足列表裡的所有元素,才符合#slop是設定分詞後[python,開發]python 與 開發,之間隔著多少個字元算匹配#佔空間字元數小於slop設定算匹配到,佔空間字元數大於slop設定不匹配GET jobbole/job/_search{  "query": {    "match_phrase": {      "title": {        "query": "elasticsearch引擎",        "slop":3      }    }  }}

 

 

multi_match查詢
比如可以指定多個欄位
比如查詢title欄位和desc欄位裡麵包含python的關鍵詞資料
query設定搜尋字詞
fields要搜尋的欄位
title^3表示權重,表示title裡符合的關鍵詞權重,是其他欄位裡符合的關鍵詞權重的3倍

#multi_match查詢#比如可以指定多個欄位#比如查詢title欄位和desc欄位裡麵包含python的關鍵詞資料#query設定搜尋字詞#fields要搜尋的欄位#title^3表示權重,表示title裡符合的關鍵詞權重,是其他欄位裡符合的關鍵詞權重的3倍GET jobbole/job/_search{  "query": {    "multi_match": {      "query": "搜尋引擎",      "fields": ["title^3","desc"]    }  }}

 

 

stored_fields設定搜尋結果只顯示哪些欄位

注意:使用stored_fields要顯示的欄位store屬性必須為true,如果要顯示的欄位沒有設定store屬性那麼預設為false,如果為false將不會顯示該欄位

#stored_fields設定搜尋結果只顯示哪些欄位GET jobbole/job/_search{  "stored_fields": ["title","company_name"],   "query": {    "multi_match": {      "query": "搜尋引擎",      "fields": ["title^3","desc"]    }  }}

 

 

通過sort搜尋結果排序
注意:排序的欄位必須是數字或者日期
desc升序
asc降序

#通過sort搜尋結果排序#注意:排序的欄位必須是數字或者日期#desc升序#asc降序GET jobbole/job/_search{  "query": {    "match_all": {}  },  "sort": [{      "comments": {        "order": "asc"      }    }]}

 

 

range欄位值範圍查詢
查詢一個欄位的值範圍
注意:欄位值必須是數字或者時間
gte大於等於
ge大於
lte小於等於
lt小於
boost是權重,可以給指定欄位設定一個權重

#range欄位值範圍查詢#查詢一個欄位的值範圍#注意:欄位值必須是數字或者時間#gte大於等於#ge大於#lte小於等於#lt小於#boost是權重,可以給指定欄位設定一個權重GET jobbole/job/_search{  "query": {    "range": {      "comments": {        "gte": 10,        "lte": 20,        "boost": 2.0      }    }  }}

 

 

range欄位值為時間範圍查詢

#range欄位值為時間範圍查詢#查詢一個欄位的時間值範圍#注意:欄位值必須是時間#gte大於等於#ge大於#lte小於等於#lt小於#now為目前時間GET jobbole/job/_search{  "query": {    "range": {      "add_time": {        "gte": "2017-4-1",        "lte": "now"      }    }  }}

 

 

wildcard查詢,萬用字元查詢
*代表一個或者多個任一字元

#wildcard查詢,萬用字元查詢#*代表一個或者多個任一字元GET jobbole/job/_search{  "query": {    "wildcard": {      "title": {        "value": "py*n",        "boost": 2      }    }  }}

 

 

fuzzy模糊查詢

#fuzzy模糊搜尋#搜尋包含詞的內容GET lagou/biao/_search{  "query": {    "fuzzy": {"title": "廣告"}  },  "_source": ["title"]}#fuzziness設定編輯距離,編輯距離就是把要尋找的欄位值,編輯成尋找的關鍵詞需要編輯多少個步驟(插入、刪除、替換)#prefix_length為關鍵詞前面不參與變換的長度GET lagou/biao/_search{  "query": {    "fuzzy": {      "title": {        "value": "廣告錄音",        "fuzziness": 2,        "prefix_length": 2      }    }  },  "_source": ["title"]}

 

四十四 Python分布式爬蟲打造搜尋引擎Scrapy精講—elasticsearch(搜尋引擎)的基本查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.