我正在使用wagtail和elasticsearch实现图像丰富的Web应用程序。要搜索图像,我想使用elasticsearch和wagtail的内置功能来索引和搜索图像。
w的图像被标记,我想使用这些标记来查找图像。图像索引已经可以立即使用,现在我正在努力寻找它们。挑战在于我想在标签中搜索文本。 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
定义一起使用?