Python 如何在Google App Engine搜索API中指定多个同名搜索字段

Python 如何在Google App Engine搜索API中指定多个同名搜索字段,python,google-app-engine,Python,Google App Engine,所以这里有一个有趣的问题,我无法靠自己解决 我正在设置一个搜索索引,希望我的文档包含几个表示类别的AtomField。每个文档可以有多个类别 谷歌的文档说,一个文档可以使用相同名称的多个字段进行设置,这非常棒,但是,您只能使用构造函数指定字段,并且在创建文档后不能修改字段列表 问题是,假设我的类别在一个数组中,如何创建每个类别一个字段的文档对象?我在Stack Overflow(现在找不到)中的另一个问题中看到了这个答案,但这并不正确: document = search.Document(

所以这里有一个有趣的问题,我无法靠自己解决

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

谷歌的文档说,一个
文档
可以使用相同名称的多个字段进行设置,这非常棒,但是,您只能使用构造函数指定字段,并且在创建
文档
后不能修改字段列表

问题是,假设我的类别在一个数组中,如何创建每个类别一个字段的文档对象?我在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有关,而不是与应用程序引擎本身有关


如果问题不清楚,则可以在字段数组中包含多个具有给定名称的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')
    ])

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

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 ]
    )

你想这么做吗:?不,真的。我试图得到多个AtomFields,而不仅仅是一个具有多个值的字段。您能指出文档中列出的可以有多个相同命名字段的地方吗?我不认为这是可行的,这就是他们实现多值字段的原因。为什么要在多个AtomFields而不是一个多值字段中包含类别?字段名称不必唯一。一个文档可以有多个具有相同名称和相同类型的字段,这是一种用多个值表示字段的方法。是的,这是对你链接的文档中“多值字段”的评论。所以你要做的是设置一个多值字段。。。。根据bruyere提供的链接,这最终是可行的(没有亲自测试,但解决方案已经被接受,所以我想它是可行的)。除非我误解了你的问题,否则这不是解决方案,因为标签是动态地来自列表的。我没有让他们指定每个AtomFields。这与我提到的不起作用的原始代码有何不同?@svpino这在语法上是正确的吗?如果这不是您要查找的,请详细说明“无法正常工作”。这是我在执行时遇到的错误:“list”对象没有属性“name”回溯(最近一次调用last):File“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.2/webapp2.py,第1529行听起来与您显示的代码无关。可能会显示一个失败代码的最小示例。可能是您提供了一个字段列表作为字段。您需要将
[field0,列出字段]
更改为
[field0]+列出字段