Elasticsearch DSL创建索引时报错’str’ object has no attribute ‘get_analysis_definition’

作者: 鲁智深 分类: java,Python 发布时间: 2018-05-14 00:31

在定义Completion自动搜索建议字段运行报错,应该是由于Elasticsearch DSL源代码存在问题,所以需要去自定义一个get_analysis_definition函数。

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
26
27
28
29
30
31
32
33
34
35
36
from datetime import datetime
from elasticsearch_dsl import DocType, 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"])

#elasticsearch程序存在問題,这段代码避免报错
class CustomAnalyzer(_CustomAnalyzer):
    def get_analysis_definition(self):
        return {}

#filter=["lowercase"]大小写转换
ik_analyzer = CustomAnalyzer("ik_max_word", filter=["lowercase"])

class ArticleType(DocType):
    #jobbole的文章类型
    suggest = Completion(analyzer="ik_analyzer")#需要完成自动补全,就需要在mapping设置字段
    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()

生成这样字段索引

1
2
3
4
5
6
"suggest": {
"max_input_length": 50,
"analyzer": "ik_max_word",
"preserve_position_increments": true,
"type": "completion",
"preserve_separators": true

关于Completion suggest的内容可以查看文档链接

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

3条评论
  • es

    2018 年 6 月 28 日 16:22

    我也一样,同样报错,修改后还是这样的

  • 虾米

    2018 年 5 月 27 日 01:41

    兄弟,你的代码测试通过了吗?
    suggest = Completion(analyzer=ik_analyzer) 才对吧?
    而且我改了之后还是报错呢!
    AttributeError: ‘str’ object has no attribute ‘get_analysis_definition’

    1. 鲁智深

      2018 年 6 月 10 日 23:37

      测试完全没有问题,你在试试

发表评论

电子邮件地址不会被公开。 必填项已用*标注