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')

以及您可能喜欢的任何其他可选参数。