关于分析字符串生成搜索建议词的问题

来源:15-2 es完成搜索建议-搜索建议字段保存 - 2

ailiucy

2020-09-05

老师,上周问您的关于在ubuntu下elasticsearch5.1.1无法启动的问题,我找了一周答案,发现官网里说这个版本还不支持ubuntu18.04,所以,我就只好安装新的版本,es==7.8.0,es-dsl ==7.2.0,(es-dsl最新的版本是7.2.1)因为是新版本,所以有些地方旧版本的方法不再试用了。
在items.py中,要通过调用indices.analyze接口分析字符串返回搜索建议分词,旧版本是这样做的

words = es.indices.analyze(index=index, analyzer="ik_max_word", params={'filter':['lowercase']}, body=text)

而且,旧版本中,老师通过下面这种方法取index也不能用了

ArticleType._doc_type.index

进行链接的时候用的using方法好像也不对

es = connections.create_connection(ArticleType._doc_type.using)

看了官方文档,我尝试这样做,但是在debug的时候,还是在words=…这句代码出错。

es = connections.create_connection(ArticleType)
def gen_suggests(index, info_tuple):
    used_words = set()
    suggests = []
    for text, weight in info_tuple:
        if text:
            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

class CnBlogsAritcleItem:
	# ...
	def save_to_es(self):
		# ...
		article.suggest = gen_suggests(ArticleType._default_index, ((article.title, 10), (article.tags, 7)))
		article.save()

我在网上搜了一夜答案,尝试了各种办法,看了官方文档,还是没有解决,实在不知道怎么做了,希望老师帮帮我。

写回答

1回答

ailiucy

提问者

2020-09-05

老师,我把'filter':['lowercase']去掉就正常了,是不是新版本分析字符串的时候不能filter,使用tokenizer,才可以加这个参数啊。https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html

0
1
bobby
有没有具体的报错呢? 现在es7 已经取消了type这个概念了 ,网上的资料好很多都还是es6以及以前的版本
2020-09-07
共1条回复

Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课

带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎

5796 学习 · 6290 问题

查看课程