一.舊版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()