Google app engine google应用程序引擎上的子字符串类型文本搜索

Google app engine google应用程序引擎上的子字符串类型文本搜索,google-app-engine,full-text-search,Google App Engine,Full Text Search,我看到google app engine现在添加了文本搜索: 这是否包括在字符串中搜索子字符串 我问这个问题的原因是因为我以前写过一些代码,允许子字符串搜索诸如姓名和电话号码之类的字段。例如,您可以搜索“San”,它会找到类似“Mike DaSantos”的结果。这对于像auto complete这样的东西来说太棒了 但是,由于这需要大量的写操作,我在成本方面遇到了问题。我这样做的每个字段大约需要O((n*n+1)/2)写操作,因为它涉及到字符串中每个字母子集的写操作。当涉及到为6000名客户的

我看到google app engine现在添加了文本搜索:

这是否包括在字符串中搜索子字符串

我问这个问题的原因是因为我以前写过一些代码,允许子字符串搜索诸如姓名和电话号码之类的字段。例如,您可以搜索“San”,它会找到类似“Mike DaSantos”的结果。这对于像auto complete这样的东西来说太棒了

但是,由于这需要大量的写操作,我在成本方面遇到了问题。我这样做的每个字段大约需要O((n*n+1)/2)写操作,因为它涉及到字符串中每个字母子集的写操作。当涉及到为6000名客户的电话号码、姓名、电子邮件地址和地址编制索引时,这增加了几美元的应用程序引擎成本

我想知道使用搜索API是否可以以更低的成本提供此功能

非常感谢

没有

我们可以搜索的唯一“通配符”是复数

~"car"  # searches for "car" and "cars"
但它可以做的是在同一字段中保存多个令牌。请参见他们的示例

例如,您可以查询一个“nametag”字段,并假设您将该名称标记到该字段中,则返回“Mike DaSantos”

Results=getIndex().search(“nametag:San”);

我不清楚这里的成本和配额。

顺便说一句,您不需要为自己的子字符串搜索解决方案编写O((n*n+1)/2)写操作

你应该只需要1个

也就是说,不是创建O((n*n+1)/2)个对象,而是在ndb.StringProperty(repeated=True)中创建一个具有O((n*n+1)/2)个列表元素的对象

  StringTokenizer tokenizer = new StringTokenizer(tagStr, ",");
  while (tokenizer.hasMoreTokens()) {
    docBuilder.addField(Field.newBuilder().setName("tag")
        .setAtom(tokenizer.nextToken()));
  }
  Results<ScoredDocument> results = getIndex().search("nametag:San");