我无法通过Wagtail的update_index
命令获取Elasticsearch来索引与反向访问者的多对多关系。
要演示此问题,请考虑此处提供的模型:https://bpaste.net/show/6b1477ff0971 (这是一个最小的工作示例,显示了两个多对多关系的工作和非工作索引)。
这是使用Wagtail 1.8.1,Elasticsearch 5.1.1和elasticsearch-py 5.1.0。
在这里,我尝试两次尝试索引多对多关系:
标签:MyPage
模型中有明确字段,该字段有through
属性。
类别:使用MyPage
(MyPageCategory
中没有明确字段)附加到related_name='categories'
模型中的MyPage
。在上面的代码中,我展示了在search_fields
模型的MyPage
中捕获类别关系的三种不同尝试,其中没有一种是成功的。
标签和类别的配置方式之间可能存在其他差异,可能导致问题。
问题:Elasticsearch不对类别编制索引,但会对代码编制索引:
"indexing_mypage__categories" : null,
"indexing_mypage__tags" : [
{
"name" : "tag2"
}
],
问题:如何让Elasticsearch为MyPage
的类别编制索引? MyPage.search_fields
应该是什么样的?
目标是能够按类别搜索页面。
答案 0 :(得分:0)
我不确定我是否100%理解这个问题,但在遇到类似问题之后我遇到了这个问题。这是我为帖子和类别索引作者的解决方案(我称之为问题)。这取自w docs。
search_fields = Page.search_fields + [
index.SearchField('get_issues'),
index.SearchField('get_columnists'),
]
def get_issues(self):
# Get list of issues and concatenate them
return '\n'.join(self.issues.all().values_list('issue', flat=True))
def get_columnists(self):
# Get list of columnists
return '\n'.join(self.columnists.all().values_list('name', flat=True))