python對於新版本elasticsearch-dsl(7.1)的使用說明


一.舊版elasticsearch-dsl(5.1)對應elasticsearch5.1.1的版本

很多同學在python搜索引擎視頻中關於看到的第十章elasticsearch使用中使用python創建mapping老師使用的以下代碼,這些代碼對於最新版的elasticsearch-dsl的引用已經失效,會報異常錯誤

from datetime import datetime
from elasticsearch_dsl import Document, Date, Nested, Boolean, \
    analyzer, InnerDoc, Completion, Keyword, Text,Integer

from elasticsearch_dsl.analysis import CustomAnalyzer as _CustomAnalyzer

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

# class CustomAnalyzer(_CustomAnalyzer):
#     def get_analysis_definition(self):
#         return {}


# ik_analyzer = CustomAnalyzer("ik_max_word", filter=["lowercase"])
class ArticleType(Document):
    #伯樂在線文章類型
    # suggest = Completion(analyzer=ik_analyzer)
    title = Text(analyzer="ik_max_word")
    create_date = Date()
    url = Keyword()
    url_object_id = Keyword()
    front_image_url = Keyword()
    front_image_path = Keyword()
    praise_nums = Integer()
    comment_nums = Integer()
    fav_nums = Integer()
    tags = Text(analyzer="ik_max_word")
    content = Text(analyzer="ik_max_word")

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

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

二.新版的引用更正以及代碼

1.最新版elasticsearch-dsl下載地址:
es-dsl對應的github地址
2.最新版構建jobbole的mapping代碼

# -*- coding: utf-8 -*-
__author__ = 'yh'
from datetime import datetime
from elasticsearch_dsl import Document, Date, Integer, Keyword, Text, connections

# Define a default Elasticsearch client
connections.create_connection(hosts=['localhost'])

class ArticleType(Document):
    #伯樂在線文章類型
    # suggest = Completion(analyzer=ik_analyzer)
    title = Text(analyzer="ik_max_word")
    create_date = Date()
    url = Keyword()
    url_object_id = Keyword()
    front_image_url = Keyword()
    front_image_path = Keyword()
    praise_nums = Integer()
    comment_nums = Integer()
    fav_nums = Integer()
    tags = Text(analyzer="ik_max_word")
    content = Text(analyzer="ik_max_word")

    class Index:
        name = 'jobbole'
        settings = {
          "number_of_shards": 5,
        }
# create the mappings in elasticsearch
if __name__ == "__main__":
    ArticleType.init()

前方高能

關於接下來的elasticsearch-dsl使用說明

新版elasticsearch-dsl上邊是這樣寫

from ArticleSpider.models.es_types import ArticleType
from elasticsearch_dsl.connections import connections
# 與ElasticSearch進行連接,生成搜索建議
es = connections.create_connection(ArticleType)

新版elasticsearch-dsl下邊是這樣寫

def gen_suggests(index,info_tuple):
    #根據字符串生成搜索建議數組
    used_words = set()
    suggests = []
    for text, weight in info_tuple:
        if text:
            #調用es的analyze接口分析字符串
            words = es.indices.analyze(index="jobbole",
                                       body={"analyzer": "ik_max_word", "text": "{0}".format(text)})
            anylyzed_words = set([r["token"] for r in words["tokens"] if len(r["token"])>1])
            new_words = anylyzed_words - used_words
        else:
            new_words = set()

        if new_words:
            suggests.append({"input":list(new_words), "weight":weight})

    return suggests

然后調用這樣寫

 article.suggest = gen_suggests(ArticleType, ((article.title, 10), (article.tags, 7)))

            article.save()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM