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

0 投票
2 回答
710 浏览
提问于 2025-04-18 19:20

这里有一个有趣的问题,我自己没法解决。

我正在建立一个搜索索引,希望我的文档中包含多个AtomField,这些字段代表不同的类别。每个文档可以有多个类别。

谷歌的文档说,一个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本身。

如果问题不太清楚,我写了一篇博客,里面有更多细节

2 个回答

0

你可以在字段数组中包含多个同名的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')
    ])
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 ]
    )

撰写回答