Wagtail:在Elasticsearch 5中使用反向访问器索引多对多关系

时间:2017-01-28 18:19:31

标签: elasticsearch indexing many-to-many wagtail

我无法通过Wagtail的update_index命令获取Elasticsearch来索引与反向访问者的多对多关系。

要演示此问题,请考虑此处提供的模型:https://bpaste.net/show/6b1477ff0971 (这是一个最小的工作示例,显示了两个多对多关系的工作和非工作索引)。

这是使用Wagtail 1.8.1,Elasticsearch 5.1.1和elasticsearch-py 5.1.0。

在这里,我尝试两次尝试索引多对多关系:

  1. 标签:MyPage模型中有明确字段,该字段有through属性。

  2. 类别:使用MyPageMyPageCategory中没有明确字段)附加到related_name='categories'模型中的MyPage。在上面的代码中,我展示了在search_fields模型的MyPage中捕获类别关系的三种不同尝试,其中没有一种是成功的。

  3. 标签和类别的配置方式之间可能存在其他差异,可能导致问题。

    问题:Elasticsearch不对类别编制索引,但会对代码编制索引:

    "indexing_mypage__categories" : null,
    "indexing_mypage__tags" : [
        {
            "name" : "tag2"
        }
    ],
    

    问题:如何让Elasticsearch为MyPage的类别编制索引? MyPage.search_fields应该是什么样的?

    目标是能够按类别搜索页面。

1 个答案:

答案 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))