前面在 Python 连接 es 的操作中,有过介绍如何使用 Python 代码连接 es 以及对 es 数据进行增删改查。
这一篇笔记介绍一下如何为 es 的 索引 index 定义一个 model,像 Django 里的 model 一样使用 es。
因为本篇笔记要介绍的内容是直接嵌入在 Django 系统使用,所以本篇笔记直接归属于 Django 笔记系列。
本篇笔记目录如下:
es_model 示例及配置介绍
数据的增删改查
字段列表操作
嵌套类型操作
类函数
排序、取字段等操作
1、es_model 示例及配置介绍
es 连接配置
首先我们要定义一下 es 的连接配置,这个在之前 Python 连接 es 的操作中有过介绍。
因为我们的 es 放在 Django 系统里,所以在系统启动的时候就要加载,因此我们一般将其配置在 settings.py 中,示例如下:
# hunter/settings.py
from elasticsearch_dsl import connections
connections.configure(
default={"hosts": "localhost:9200"},
)
复制代码
模型示例
我们在 blog application 下建立一个 es_models.py 文件用于存储我们的 es 索引模型:
ik_max_word 的作用是将文本按照语义进行可能的重复分词,比如文本是 "一个苹果",那么分词的结果就是 "一个","一","个","苹果"。
Index
我们在每个 es 模型下都要定义一个 Index,其中的属性这里介绍两个,一个是 name,一个是 using。 name 表示的是索引名称 using 表示的是使用的 es 链接,es 的链接定义我们前面在 settings.py 里有定义,可以指定 using 的名称,这里不对 using 赋值的话默认取值为 default
keyword 和 text
什么时候用到 Keyword,什么时候用 Text 呢,这里再赘述一下
选取哪种类型主要取决于我们字段的业务属性
一些需要用于整体搜索的字段可以使用 Keyword 类型,姓名,邮箱、标签等
大段文字的、不会被整体搜索的、需要搜索某些关键词的字段可以用 Text 字段,比如博客标题,正文内容等
模型初始化
在首次使用每个 es 模型前,我们都需要对模型进行初始化的操作,其含义就是将索引各字段对应的 mapping 写入 es 中,这里我们通过 python3 manage.py shell 来完成这个操作:
from blog.es_models import BlogEs
BlogEs.init()
复制代码
初始化之后,我们可以在 kibana 里看到对应的 es 索引。
接下来我们尝试对模型的数据进行增删改查等操作。
2、数据的增删改查
排序和指定字段返回我们也可以将参数传入 extra(),然后进行操作,比如按照 char_count 字段正序排列,name 字段倒序,以及只返回 char_count 和 name 字段
query = query.extra(
sort=[
{"char_count": {"order": "asc"}},
{"name": {"order": "desc"}}
],
_source=["char_count", "name"]
)
复制代码
4.分页操作
也可以在 extra() 中通过 from 和 size 实现分页操作:
query = query.extra(
**{
"from": 2,
"size": 3
}
)
复制代码
原文链接:[前面在 Python 连接 es 的操作中,有过介绍如何使用 Python 代码连接 es 以及对 es 数据进行增删改查。
这一篇笔记介绍一下如何为 es 的 索引 index 定义一个 model,像 Django 里的 model 一样使用 es。
因为本篇笔记要介绍的内容是直接嵌入在 Django 系统使用,所以本篇笔记直接归属于 Django 笔记系列。
本篇笔记目录如下:
es_model 示例及配置介绍
数据的增删改查
字段列表操作
嵌套类型操作
类函数
排序、取字段等操作
1、es_model 示例及配置介绍
es 连接配置
首先我们要定义一下 es 的连接配置,这个在之前 Python 连接 es 的操作中有过介绍。
因为我们的 es 放在 Django 系统里,所以在系统启动的时候就要加载,因此我们一般将其配置在 settings.py 中,示例如下:
# hunter/settings.py
from elasticsearch_dsl import connections
connections.configure(
default={"hosts": "localhost:9200"},
)
复制代码
模型示例
我们在 blog application 下建立一个 es_models.py 文件用于存储我们的 es 索引模型:
ik_max_word 的作用是将文本按照语义进行可能的重复分词,比如文本是 "一个苹果",那么分词的结果就是 "一个","一","个","苹果"。
Index
我们在每个 es 模型下都要定义一个 Index,其中的属性这里介绍两个,一个是 name,一个是 using。 name 表示的是索引名称 using 表示的是使用的 es 链接,es 的链接定义我们前面在 settings.py 里有定义,可以指定 using 的名称,这里不对 using 赋值的话默认取值为 default
keyword 和 text
什么时候用到 Keyword,什么时候用 Text 呢,这里再赘述一下
选取哪种类型主要取决于我们字段的业务属性
一些需要用于整体搜索的字段可以使用 Keyword 类型,姓名,邮箱、标签等
大段文字的、不会被整体搜索的、需要搜索某些关键词的字段可以用 Text 字段,比如博客标题,正文内容等
模型初始化
在首次使用每个 es 模型前,我们都需要对模型进行初始化的操作,其含义就是将索引各字段对应的 mapping 写入 es 中,这里我们通过 python3 manage.py shell 来完成这个操作:
from blog.es_models import BlogEs
BlogEs.init()
复制代码
初始化之后,我们可以在 kibana 里看到对应的 es 索引。
接下来我们尝试对模型的数据进行增删改查等操作。
2、数据的增删改查