es更新说明(dsl)

一.旧版elasticsearch-dsl
很多同学在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()

posted @ 2019-11-08 09:30  达芬奇vinic  阅读(733)  评论(0)    收藏  举报