古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。

在Django项目中使用Elasticsearch

Python admin 161℃ 0评论

目录

在Django项目中使用elasticsearch同Java中有一点差别。Java的es库已经被大厂封装好了,直接调用对应的API就行(当前Java操作ES的API也特别复杂);而Python操作ES的方式主要是通过http发送json参数。不过这样和ES的入门方式一致,ES的各种文档也都是基于json格式请求的。

java的API也支持直接发送json参数

要使用elasticsearch,先要安装依赖:

要集成elasticsearch,可以基于数据库的模型(当然你可以说这个模型就是给elasticsearch用的,和数据库无关),因为很少单独使用elasticsearch,一般都是做为数据库的分压源存在的。不过也完全可以单独使用elasticsearch的模型,叫索引。类似于models.py,我们可以创建index.py用于存放ES的索引模型。

以前文中的数据库模型为例:

我们在index.py中记录索引结构:

类似于MyMd继承了Model,MyIndex继承了Document。里面也有一个内部类Index,用于指定索引的名称。

数据库的模型需要有序列化器,elasticsearch也是需要的。下面是上面的索引的序列化器:

fields用于指定索引中的字段,__all__表示全部字段。

创建文档的时候,将数据库模型或者ES模传入MyIndexSerializer的构造器即可:

连接地址可以传入单个串或者是元组表示集群,调用序列化器ElasticModelSerializer的save方法即可保存,如果索引不存在会先创建。

如果要查询,创建客户端:

返回的数据格式都是一样的,使用res[‘hits’][‘hits’]拿到命中记录即可。

参考文献

转载请注明:北凉柿子 » 在Django项目中使用Elasticsearch

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址