1. 程式人生 > >Python模組的使用-- elasticsearch模組

Python模組的使用-- elasticsearch模組

Python操作Elasticsearch

參考整理了一下,當做學習筆記,記錄一下。
安裝模組

pip install elasticsearch  # 6.x版本

Python操作Elasticsearch

建立索引

from elasticsearch import Elasticsearch
 
es = Elasticsearch()
result = es.indices.create(index='news', ignore=400)
print(result)  # {'acknowledged': True, 'index': 'news', 'shards_acknowledged': True} acknowledged 為True表示建立成功

刪除索引

result = es.indices.delete("news", ignore=[400, 404])
print(result) # {'acknowledged': True}

插入一條document

# 法一
es.create("news", "politics", body=content, id=1)

# 法二
 es.index("news", doc_type="politics", body=data)  # ok 可以不用指定id, 引數id預設為隨機建立

更新資料

# 法一
data = {'date': '2018-01-05 12:30:00'
, 'title': 'asd123', 'url': 'http://view.news.qq.com/zt2011/usa_iraq/index.htm'} result = es.update(index='news', doc_type='politics', body=data, id=1) # error print(result) data_doc = {'doc': {'date': '2018-01-05 12:30:00', 'title': 'asd123', 'url': 'http://view.news.qq.com/zt2011/usa_iraq/index.htm'}} result =
es.update(index='news', doc_type='politics', body=data, id=1) # ok print(result) # 法二 data = {'date': '2018-01-05 12:30:00', 'title': 'asd123', 'url': 'http://view.news.qq.com/zt2011/usa_iraq/index.htm'} # ok 使用data_doc也ok es.index(index='news', doc_type='politics', body=data, id=1)

刪除資料

result = es.delete("news", "politics", id='vNaqc2cBE_LRbsBxQ94C')  # ok

查詢資料

# 指定分詞器 安裝一個分詞外掛,這裡使用的是 elasticsearch-analysis-ik
# mapping 資訊中指定了分詞的欄位,指定了欄位的型別 type 為 text,分詞器 analyzer 和 搜尋分詞器 search_analyzer 為 ik_max_word
mapping = {
    'properties': {
        'title': {
            'type': 'text',
            'analyzer': 'ik_max_word',
            'search_analyzer': 'ik_max_word'
        }
    }
}

query = {
    'query': {
        'match': {
            'title': '中國 領事館'
        }
    }
}
es = Elasticsearch()
result = es.search(index='news', doc_type='politics', body=query)
print(result)

查詢並刪除

# 匹配大於21歲的文件
query = {"query": {"range": {"age": {"gt": 21}}}}
es.delete_by_query(index='indexName', body=query, doc_type='typeName')

查詢相關

datas = [{'age': 34,'date': '2018-01-01','sex': '男', 'title': '鏢旗標題啊111,Python ElasticSearch基礎教程'}, {'age': 10, 'date': '2017-05-13', 'sex': '男', 'title': '標題2'},{'age': 24, 'date': '2019-01-01', 'sex': '女', 'title': 'haha'}]

# 查詢所有
query = {"query": {"match_all":{}}}
# 提供boost引數可以修改_score
query = {"query": {"match_all": {"boost": 1.2}}}
# 查詢所有相反操作, 不匹配任何文件
query = {'query': {'match_none': {}}}

## 全文查詢相關
#(1)匹配查詢
query = {"query": {"match" : {"title" : "Python"}}}
# (2) 多匹配查詢
query = {'query': {'multi_match': {'fields': ['title', 'sex'], 'query': '標題 男'}}}
# (3) term
body = {"query":{"term":{"title":"python"}}}  # 查詢title包含"python"的所有資料
es.search(index="bbs",doc_type="user",body=body)

# (4) terms
body = {"query":{"terms":{"title":["python","標題"]}}}
es.search(index="bbs",doc_type="user",body=body)  # 搜尋出title包含"python"或包含"標題"的所有資料

# (5) ids
body = {"query":{"ids":{"type":"user","values":["1", "z9Yrd2cBE_LRbsBxdt7t"]}}}
# 搜尋出id為1或對應id的資料
es.search(index="bbs",doc_type="user",body=body)

# (6) 複合查詢bool
# bool有3類查詢關係,must(都滿足),should(其中一個滿足),must_not(都不滿足)
body = {'query': {'bool': {'should': [{'term': {'title': 'python'}},{'term': {'age': 24}}]}}}
es.search("bbs", doc_type="user", body=body)

# (7) 切片查詢
body = {'from': 2, 'query': {'match_all': {}}, 'size': 4}  # from 從第二條開始查詢 size查詢4條記錄
# (8) 範圍查詢
body = {'query': {'range': {'age': {'gte': 10, 'lte': 32}}}}  # 大於等於10,小於等於32
es.search("bbs", doc_type="user", body=body)
# (9) 字首查詢
body = {'query': {'prefix': {'title': '標'}}}
# (10) 萬用字元查詢
body =  {'query': {'wildcard': {'title': 'python*'}}}
# (11) 排序
body = {'query': {'match_all': {}}, 'sort': {'age': {'order': 'desc'}}}  # 升序asc 降序desc
# (12) 相應過濾
es.search("bbs", "user", filter_path=["hits.hits._id", "hits.hits._source.title"])  # 獲取id和對應的title
es.search("bbs", "user", filter_path=["hits.hits.*"])  # 獲取所有資料
# (13) 執行查詢並獲取查詢匹配數
es.count(index="bbs", doc_type="user")  # {'_shards': {'failed': 0, 'skipped': 0, 'successful': 5, 'total': 5}, 'count': 3}

參考文件:
https://elasticsearch-py.readthedocs.io/en/master/api.html#global-options
https://blog.csdn.net/u013429010/article/details/81746179