gpt4 book ai didi

python - 对多个字段执行 OR 或将这些字段值组合成单个字段名是否更高效

转载 作者:行者123 更新时间:2023-11-28 18:43:25 25 4
gpt4 key购买 nike

我有一个如下所示的数据存储模型:

class Project(ndb.Model):
name = ndb.StringProperty()
statement = ndb.StringProperty()
description = ndb.StringProperty()

我们正在从我们的模型数据构建一个搜索 API 实现...所以我将构建搜索 API 文档并将我们的数据存储模型映射到它们。

最终结果是我想从一个查询中搜索所有这三个字段...因此,例如,用户键入“city”,系统应该会找到所有名称中都包含“city”一词的项目、声明或描述

我可以用三个通常与模型一对一映射的字段来定义文档,例如:

fields = [
TextField(name="name" value=proj.value),
TextField(name="statement" value=proj.statement)
HtmlField(name="description" value=proj.description)
]

然后用

查询

"name:city OR statement:city OR description:city"

当然搜索 API 文档说:

The "OR" disjunction is an expensive operation in both billable operations and computation time

所以我的另一个选择是将这些组合成一个可搜索的字段名,例如:

fields = [
TextField(name="search" value=proj.value),
TextField(name="search" value=proj.statement)
HtmlField(name="search" value=proj.description)
]

并查询:

"search:city"

我应该假设后者会表现更好吗?但是这种方法会失去字段名称的区别,并且可能会失去 GAE 团队可能添加的“自定义评分”的 future 好处(请参阅此问题/答案):

Google App Engine Search API

我是否只是想过早过度优化并过度思考一切?你说呢?

最佳答案

您可以像现在一样继续编制索引:

fields = [
TextField(name="name", value=proj.value),
TextField(name="statement", value=proj.statement)
HtmlField(name="description", value=proj.description)
]

注意:您可能希望在索引之前去除 html,除非它确实增加了值(value)

然后使用该值作为查询。如果您不指定字段,您将获得在任何字段中具有匹配项的文档的结果。

your_index.search(query)  # This will match the value of city in any field

如果您有比此处所说的更多的字段,并且不希望这些字段包含在您的搜索中,那么使用一个字段来指定这 3 个的组合值将是可行的方法:

fields = [
TextField(name="name", value=proj.value),
TextField(name="statement", value=proj.statement)
HtmlField(name="description", value=proj.description)
TextField(name="foo", value=proj.foo)
TextField(name="bar", value=proj.bar)
TextField(name="composed_field", value=' '.join((
proj.value,
proj.statement,
proj.description
)) # or something like this
]

然后:

your_index.search('composed_field:"%s"' % query)  # Look ma', no OR

关于python - 对多个字段执行 OR 或将这些字段值组合成单个字段名是否更高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23497676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com