我发现谷歌应用引擎现已添加了文字搜索:https://developers.google.com/appengine/docs/python/search/overview
这是否包括在字符串中搜索子字符串?
我问的原因是因为我之前写了一些代码,允许子字符串搜索名称和电话号码等字段。例如,您可以搜索“San”,它会找到“Mike DaSantos”之类的结果。这对于像auto-complete这样的东西来说太棒了。
我遇到了成本问题,因为这需要大量的写操作。我这样做的每个字段都需要大致的O((n * n + 1)/ 2)写操作,因为它涉及字符串中每个字母子集的写操作。在为6000个客户索引电话号码,姓名,电子邮件地址和地址时,这增加了几美元的应用引擎成本。
我想知道使用搜索API是否可以以更低的成本提供此功能?
非常感谢!
答案 0 :(得分:4)
不,它没有。
唯一的#34;通配符"我们可以用复数搜索。
~"car" # searches for "car" and "cars"
它可以做的是在同一个字段中保存多个令牌。请参阅TextSearchServlet
上的示例 StringTokenizer tokenizer = new StringTokenizer(tagStr, ",");
while (tokenizer.hasMoreTokens()) {
docBuilder.addField(Field.newBuilder().setName("tag")
.setAtom(tokenizer.nextToken()));
}
所以你可以查询"名称标签"例如,假设你将名称标记到其中,得到麦克DaSantos"回
Results<ScoredDocument> results = getIndex().search("nametag:San");
我对这里的成本和配额并不十分清楚。
答案 1 :(得分:1)
顺便说一句,您不应该为自己的子字符串搜索解决方案进行O((n * n + 1)/ 2)写操作。
你应该只需要1。
即,不是创建O((n * n + 1)/ 2)对象,而是在ndb.StringProperty中创建一个具有O((n * n + 1)/ 2)列表元素的对象(重复= True )