谷歌应用程序引擎 - 使用搜索API的Python与列表字段(Google App Engine -

2019-09-02 02:57发布

我使用ndb.Model。 搜索API具有以下字段类别:

    TextField : plain text
    HtmlField : HTML formatted text
    AtomField : a string which is treated as a single token
    NumberField : a numeric value (either float or integer)
    DateField : a date with no time component
    GeoField : a locale based on latitude and longitude

假设我有一个“标签”字段是列表字段:

    tags = ndb.StringProperty(repeated=True)

我怎么看待这个领域与search.Document

现在,我打开tags列表转换为字符串:

    t = '|'.join(tags)

然后:

    search.TextField(name=cls.TAGS, value=t)

有什么建议?

Answer 1:

使用唯一标识符为每个“标签”。 然后,您可以创建这样一个文件:

doc = search.Document(fields=[
    search.TextField(name='tags', value='tag1 tag2 tag3'),
])
search.Index(name='tags').put(doc)

你甚至可以用编号(ID)为字符串:

doc = search.Document(fields=[
    search.TextField(name='tags', value='123 456 789'),
])

并使用运营商查询,如你所愿:

index = search.Index(name='tags')
results = index.search('tags:(("tag1" AND "tag2") OR ("tag3" AND "tag4"))')


Answer 2:

您应该添加尽可能多的领域“标签”你有,都具有相同的FIELD_NAME:

doc = search.Document(fields=[
    search.TextField(name='tag', value=t) for t in tags
])

正如文档:

一个字段只能包含一个值,它必须与字段的类型相匹配。 字段名称不必是唯一的。 文档可以具有相同的名称和相同的类型,这是表示具有多个值的字段的方式的多个字段。 (然而,具有相同的名称的日期和数字字段不能被重复。)的文件也可以包含具有相同名称和不同字段类型多个字段。



文章来源: Google App Engine - Using Search API Python with list fields