我希望在App Engine的官方文本搜索功能发布之前,能够实现一个简单而有效的appengine文本搜索。我看到外面有一些库,但是安装新的总是很麻烦。我想知道这是不是一个有效的策略:
2) 保存添加了这些列表的记录
例如,如果我有一个记录:
{
firstName="Jon";
lastName="Doe";
}
我可以拯救这样的财产:
{
firstName="Jon";
lastName="Doe";
// not case sensative:
firstNameSearchable=["j","o", "n","jo","on","jon"];
lastNameSerachable=["D","o","e","do","oe","doe"];
}
//pseudo-code:
SELECT person
WHERE firstNameSearchable=="jo" AND
lastNameSearchable=="oe"
这就是文本搜索的实现方式吗?你如何防止索引失控,尤其是当你有一个段落或什么的时候?有没有其他常用的压缩策略?我想如果我只是想要简单的东西,这可能行得通,但很高兴知道我可能遇到的问题。
更新:::
好吧,所以这个概念可能是合法的。这篇博文还提到:
http://googleappengine.blogspot.com/2010/04/making-your-app-searchable-using-self.html
下面的响应中建议的解决方案是一个很好的快速修复方法,但是由于大表的限制,只有在查询一个字段时才有效,因为在查询中只能对一个属性使用非相等运算符:
db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")
我对诸如电话号码之类的数据做了一些不同的处理,在这些数据中,您可能希望搜索从开头或中间数字开始的数据。在本例中,我只是存储了以长度为3的字符串开头的整个子字符串集,因此电话号码“123-456-7890”将是:{“123”、“234”、“345”123456789“,”234567890“,”1234567890“},总计(10*((10+1)/2))—(10+9)=41个索引。。。实际上,为了删除一些不太可能使用的子字符串,我所做的有点复杂,但是你明白了。
(Pseaudo代码)
从某人中选择
firstNameSearchIndex=“拉尔”
phonenumberSearchIndex==“1234”
app engine的工作方式是,如果查询子字符串与属性中的任何子字符串匹配,则将其视为匹配。