首页 > 解决方案 > 搜索鹡鸰图像

问题描述

我正在用 wagtail 和 elasticsearch 实现一个图像丰富的 webapp。要搜索图像,我想使用弹性搜索和 wagtail 的内置功能来索引和搜索图像。

wagtail 中的图像已标记,我想使用这些标记来查找图像。图像的索引已经开箱即用,现在我正在努力寻找它们。挑战是我想在标签中搜索文本。Wagtail 在对象管理器上提供了一个 search() 函数,可用于搜索:

images = Image.objects.search("sometag")

要限制对特定字段的搜索,可以执行以下操作:

images = Image.objects.search("sometag", fields=['title'])

现在限制定义为搜索相关字段的标签:

search_fields = CollectionMember.search_fields + [
    index.SearchField('title', partial_match=True, boost=10),
    index.AutocompleteField('title'),
    index.FilterField('title'),
    index.RelatedFields('tags', [
        index.SearchField('name', partial_match=True, boost=10),
        index.AutocompleteField('name'),
    ]),
    index.FilterField('uploaded_by_user'),
]

我希望 search() 函数可以使用 'tag' 或 'tag.name' 参数:

images = Image.objects.search("sometag", fields=['tags.name'])
images = Image.objects.search("sometag", fields=['tags'])

但我只收到以下错误:

wagtail.search.backends.base.SearchFieldError: Cannot search with field "tags.name". Please add index.SearchField('tags.name') to Image.search_fields.

或者

wagtail.search.backends.base.SearchFieldError: Cannot search with field "tags". Please add index.SearchField('tags') to Image.search_fields.

如何使用fields=...具有RelatedFields定义的功能Images

标签: djangoelasticsearchsearchwagtailwagtail-search

解决方案


推荐阅读