Django 中的 Algolia 模型集成 - 处理各种字段类型的可能方法
Algolia model integration within Django - possible ways to handle various field types
我有一个包含各种不同字段类型的模型,我希望 Algolia 搜索引擎能够正确索引这些字段类型。到目前为止,我已经能够非常直接地处理 models.char_fields
- 我现在在想,索引各种其他字段类型(例如 ForeignKey
"objects"、ImageFields
, DateTime
字段等等).
我注意到的一件事是 Algolia 将获取并存储一个 DateTimeField
作为 Unix 标准时间...所以,最初我认为我可以使用 {% humanize %}
在模板上呈现一些人类可读的东西,但没有运气。
我想知道是否有人知道从模型中拖出有用信息的方法 - 我的一个想法是在视图中抓取对象,然后为每个返回的对象带出一个唯一的标识,然后进行一些工作条件流程将该唯一标识与模型结合起来,然后我可以正常使用该模型......?如:
def instant_search(request):
posts = Post.published.all()
context = {
'appID': settings.ALGOLIA['APPLICATION_ID'],
'searchKey': settings.ALGOLIA['SEARCH_API_KEY'],
'indexName': get_adapter(Post).index_name,
'posts': posts,
}
return render(request, 'blog/frame/instant_search.html', context)
我可以在模板中使用 {% for posts in post %} {% if post.id = _highlightResult.id.value %} ...do some stuff {% endif %} {% endfor %}
如果这不够快(我敢保证它不会),我想知道 Algolia 是否可以处理关键信息,例如拖出 url 图像在模型中被定义为 ImageField
例如,就像我在模板中使用 post.image.url
或从 DateTime
字段 models.DateTimeField(default=timezone.now)
中获取的人类可读值一样模型。这样做真的很好,因为 Algolia 索引了定义的模型字段...
刚想出这个:
在 models.py
中,我必须定义属性方法来获取可操纵的定制值,以便 Algolia 理解:
例如,我在 class 中为我希望索引的模型定义了以下内容:
def image_url(self):
"""Get upload_to path specific to this photo: Algolia recognizable format."""
return self.image_scroll_1.url
def published_date(self):
"""Returns a humanized date format for Algolia indexing."""
humanized_published_date = str(self.publish.strftime("%A, %d, %B %Y %I:%M%p"))
return humanized_published_date
希望这对使用 Algolia 和完成各种教程(我正在通过示例使用 Django)的其他人有所帮助。
这些可以在index.py中引用如下:
从 algoliasearch_django 导入 AlgoliaIndex
class PostIndex(AlgoliaIndex):
fields = ('title', 'post_author', 'lead_in', 'published_date', 'keyword_tags', 'image_url', 'get_absolute_url')
以及您可能喜欢的任何其他可选参数。
我有一个包含各种不同字段类型的模型,我希望 Algolia 搜索引擎能够正确索引这些字段类型。到目前为止,我已经能够非常直接地处理 models.char_fields
- 我现在在想,索引各种其他字段类型(例如 ForeignKey
"objects"、ImageFields
, DateTime
字段等等).
我注意到的一件事是 Algolia 将获取并存储一个 DateTimeField
作为 Unix 标准时间...所以,最初我认为我可以使用 {% humanize %}
在模板上呈现一些人类可读的东西,但没有运气。
我想知道是否有人知道从模型中拖出有用信息的方法 - 我的一个想法是在视图中抓取对象,然后为每个返回的对象带出一个唯一的标识,然后进行一些工作条件流程将该唯一标识与模型结合起来,然后我可以正常使用该模型......?如:
def instant_search(request):
posts = Post.published.all()
context = {
'appID': settings.ALGOLIA['APPLICATION_ID'],
'searchKey': settings.ALGOLIA['SEARCH_API_KEY'],
'indexName': get_adapter(Post).index_name,
'posts': posts,
}
return render(request, 'blog/frame/instant_search.html', context)
我可以在模板中使用 {% for posts in post %} {% if post.id = _highlightResult.id.value %} ...do some stuff {% endif %} {% endfor %}
如果这不够快(我敢保证它不会),我想知道 Algolia 是否可以处理关键信息,例如拖出 url 图像在模型中被定义为 ImageField
例如,就像我在模板中使用 post.image.url
或从 DateTime
字段 models.DateTimeField(default=timezone.now)
中获取的人类可读值一样模型。这样做真的很好,因为 Algolia 索引了定义的模型字段...
刚想出这个:
在 models.py
中,我必须定义属性方法来获取可操纵的定制值,以便 Algolia 理解:
例如,我在 class 中为我希望索引的模型定义了以下内容:
def image_url(self):
"""Get upload_to path specific to this photo: Algolia recognizable format."""
return self.image_scroll_1.url
def published_date(self):
"""Returns a humanized date format for Algolia indexing."""
humanized_published_date = str(self.publish.strftime("%A, %d, %B %Y %I:%M%p"))
return humanized_published_date
希望这对使用 Algolia 和完成各种教程(我正在通过示例使用 Django)的其他人有所帮助。
这些可以在index.py中引用如下:
从 algoliasearch_django 导入 AlgoliaIndex
class PostIndex(AlgoliaIndex):
fields = ('title', 'post_author', 'lead_in', 'published_date', 'keyword_tags', 'image_url', 'get_absolute_url')
以及您可能喜欢的任何其他可选参数。