跳转到主要内容

Django模型管理器,用于Elasticsearch集成

项目描述

# elasticmanager
将ORM转换为Elasticsearch的管理器

*此包仍在积极开发中。目前它被构建为Django ORM的混入。然而,一旦稳定,它将被抽象化,以便能够插入到其他ORM中。*

此包需要`elasticsearch-dsl`,您可以通过以下方式获得

pip install elasticsearch-dsl

## 入门

1. 要开始,从pip安装。

pip安装elasticmanager

1. 将`elasticmanager`添加到您的`settings.py`(这启用了管理命令)。
1. 在`settings.py`中放入您的索引名称:`ELASTICSEARCH_INDEX = 'myindex'`
1. 从`elasticmanager.ElasticModel`派生。

```python
from django.db import models
from elasticmanager.models import ElasticModel
class Visitor(ElasticModel, models.Model)
name = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True, editable=False)
```


1. 在与相应的`models.py`相同的应用中创建一个`doctypes.py`。
向此文件添加一个与您的模型同名的`DocType`。(有关创建`DocType`的更多信息,请参阅[Elasticsearch DSL文档](https://elasticsearch-dsl.elastic.ac.cn/en/latest/persistence.html#doctype))

```python
from django.conf import settings
from elasticmanager.doctypes import BaseDocType
from . import models
class Visitor(BaseDocType)

pk = field.Keyword()
name = field.Keyword()
created = field.Date()

class Meta
model = models.Visitor
index = settings.ELASTICSEARCH_INDEX
```


请注意,`doctype`的`Meta`信息应链接到`model`和`index`。

1. 运行`./manage.py rebuild_mapping`
1. 运行`./manage.py rebuild_indexing`(如果有需要索引的DB项)

还有一个管理命令(`./manage.py remove_index <NAME>`),可以用于删除整个索引。在开发阶段非常有用。

目前,对模型实例上的 `.save()` 方法的所有调用都会触发 doctype 的 `.save()`,因此将保持 Elasticsearch 中的索引是最新的。

## 查询和过滤调用

调用与默认 Django 语法大致相同。

**获取所有实例**

```python
visitors = Visitor.elastic.all() # 从 Elasticsearch 返回所有内容
```

**获取一个实例**

```python
visitor = Visitor.elastic.get(pk=123) # 根据特定的键从 Elasticsearch 返回一个实例
visitor = Visitor.elastic.first() # 返回查询集中的第一个实例
visitor = Visitor.elastic.last() # 返回查询集中的最后一个实例
```

**计数实例数量**

```python
count = Visitor.elastic.count() # 计数查询集中的实例数量
```

**过滤/查询** *这与 [查询](https://elasticsearch-dsl.elastic.ac.cn/en/latest/search_dsl.html#queries) 和 [过滤](https://elasticsearch-dsl.elastic.ac.cn/en/latest/search_dsl.html#filters) 方法相匹配。有关更多信息,请参阅相关文档.*

```python
johns = Visitor.elastic.filter(name="John") # 从 Elasticsearch 返回所有内容
```

**链式调用适用**

```python
first_john = Visitor.elastic.filter(name="John").first()
```

内部有一个 `execute()` 方法正在提交搜索。这可以单独调用,如果您(例如)正在操作查询集,那么可能应该这样做。但是,如果您正在调用 `count()` 或遍历结果集,则不需要调用它。

```python
johns = Visitor.elastic.filter(name="John")
for john in johns
print(john)

# 或

johns = Visitor.elastic.filter(name="John")
johns.execute()
print(johns.results)
```

*这个要求将在进一步调整以使其更直观之后被移除.*

## 未来计划

- 从使用 `models.Manager` 中抽象
- 修复类工厂,以便 `Model` 可以自动转换为 `DocType`,而无需在 `doctypes.py` 中定义它。
- 测试
- 聚合
- 扩展异常处理
- 更多管理命令
- 更强大的 API

如果您有任何问题、想法、投诉或赞美,请告诉我。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

elasticmanager-0.2.6.tar.gz (8.8 kB 查看散列)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面