如何在Google App Engine Search API中指定多个具有相同名称的搜索字段

时间:2014-08-29 09:18:22

标签: python google-app-engine

所以这是一个我无法自己解决的有趣问题。

我设置了一个搜索索引,我希望我的文档包含多个代表类别的AtomField。每个文档可以有多个类别。

Google的文档说明Document可以使用相同的名称设置多个字段,这很棒,但是,您只能使用构造函数指定字段,而且您可以“#{1}}。在创建Document后修改字段列表。

问题是,假设我的类别在数组中,如何创建每个类别一个字段的Document对象?我在Stack Overflow中的另一个问题中看到了这个答案(现在无法找到),但这不能正常工作:

document = search.Document(
    doc_id = files[file_index],
    fields=[
        search.TextField(name='name', value=my_name),
        search.AtomField(name='category', value=c) for c in categories
    ])

我认为这里的挑战与Python本身的关系比与App Engine本身有关。

如果问题不明确,请I wrote a blog post with more details

2 个答案:

答案 0 :(得分:2)

我不确定这是你要求的,但听起来你只是希望能够连接两个列表:

document = search.Document(
    doc_id = files[file_index],
    fields =
        [ search.TextField(name='name', value=my_name) ]
        + [ search.AtomField(name='category', value=c) for c in categories ]
    )

答案 1 :(得分:0)

您可以在fields数组中包含多个具有给定名称的AtomField实例:

document = search.Document(
  doc_id = article["id"],
    fields=[
      search.TextField(name='title', value=article["title"]),
      search.DateField(name='date', value=article["date"]),                 
      search.HtmlField(name='content', value=article["html"]),
      search.AtomField(name='tag', value='Foo'),
      search.AtomField(name='tag', value='Bar')
    ])