天津11选5开奖走势图手机版:elasticsearch-dsl-py實現python對接

作者: 魯智深 分類: java,Python 發布時間: 2018-05-13 21:29

天津11选5中奖结果 www.ebzvaz.com.cn Elasticsearch DSL是一個高級庫,其目的是幫助編寫和運行針對Elasticsearch的查詢。它建立在官方低級客戶端(elasticsearch-py)之上。

它提供了一種更方便和習慣的方式來編寫和操作查詢。它接近Elasticsearch JSON DSL,反映了它的術語和結構。它直接使用定義的類或類似查詢集的表達式來暴露從Python的DSL的整個范圍。

它還提供了一個可選的包裝器,用于將文檔作為Python對象進行處理:定義映射,檢索和保存文檔,將文檔數據封裝在用戶定義的類中。github地址

要使用其他Elasticsearch API(例如,集群運行狀況),只需使用底層客戶端即可。

上面是elasticsearch-dsl-py的介紹,如果有用過django的框架,那么理解elasticsearch-dsl-py也是非常容易的。

下面我們嘗試編寫py文件mapping一個索引到Elasticsearch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from datetime import datetime
from elasticsearch_dsl import DocType, Date, Nested, Boolean, \
    analyzer, InnerDoc, Completion, Keyword, Text,Integer

from elasticsearch_dsl.connections import connections
connections.create_connection(hosts=["localhost"])

class ArticleType(DocType):
    #jobbole的文章類型
    h1 = Text(analyzer="ik_max_word")
    create_time = Date()
    likes = Integer()
    match_bookmark = Integer()
    comments_bookmark = Integer()
    category_tag_itme = Text()
    img_url = Keyword()
    img_url_path = Keyword()
    detail_url = Keyword()

    class Meta:
        index = "jobbole"
        doc_type = "article"

if __name__ == '__main__':
    ArticleType.init()

orm映射機制幾乎和django一模一樣,mate中定義了數據庫index和表type

elasticsearch-head

elasticsearch-head

在elasticsearch-head中就能查看到數據索引信息

如果覺得我的文章對您有用,請隨意打賞。您的支持將鼓勵我繼續創作!

3條評論
  • corry

    2019 年 4 月 29 日 11:40

    博主你好,現在我遇見一個問題,當我去init這個doctype的時候,會有:ValueError: You cannot perform API calls on the default index.這樣的錯誤,我在網上找不到類似的問題,博主能否幫忙解答一下~

    謝謝~

  • 南門看守者

    2018 年 10 月 16 日 10:20

    執行時報錯:
    File “/Users/zhaoyicheng/PycharmProjects/excel/venv/lib/python3.6/site-packages/elasticsearch_dsl/document.py”, line 32, in __new__
    new_cls._index.document(new_cls)
    File “/Users/zhaoyicheng/PycharmProjects/excel/venv/lib/python3.6/site-packages/elasticsearch_dsl/index.py”, line 123, in document
    ‘trying to assign %s.’ % (self._mapping.doc_type, name))
    elasticsearch_dsl.exceptions.IllegalOperation: Index object cannot have multiple types, doc already set, trying to assign article.

    1. corry

      2019 年 4 月 29 日 11:43

      這個問題是因為目前的es的一個index只能有一個type,因為最新的type接近廢棄的狀態,所以會報這個錯,所以你的一個index不要創建多個type就好。

      希望這能幫助你解決問題。

發表評論

電子郵件地址不會被公開。 必填項已用*標注