我使用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)
有什么建议?
使用唯一标识符为每个“标签”。 然后,您可以创建这样一个文件:
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"))')
您应该添加尽可能多的领域“标签”你有,都具有相同的FIELD_NAME:
doc = search.Document(fields=[
search.TextField(name='tag', value=t) for t in tags
])
正如文档:
一个字段只能包含一个值,它必须与字段的类型相匹配。 字段名称不必是唯一的。 文档可以具有相同的名称和相同的类型,这是表示具有多个值的字段的方式的多个字段。 (然而,具有相同的名称的日期和数字字段不能被重复。)的文件也可以包含具有相同名称和不同字段类型多个字段。