使用Google App Engine和JDO进行全文搜索?

Geo*_*old 5 google-app-engine full-text-search jdo

我正在使用带有JDO的Google App Engine(Java).我怎么能相当于JDO

select * from table where field like '%foo%'
Run Code Online (Sandbox Code Playgroud)

到目前为止我唯一看到的建议是使用Lucene.我很惊讶这种基本的东西在开箱即用的GAE上是不可能的.

Nic*_*son 6

您无法在App Engine上对该排序进行子字符串搜索.这样做的原因是App Engine数据存储区是可扩展的,并且拒绝执行任何索引无法满足的查询.索引此类查询几乎是不可能的,因为它需要搜索每个记录的"字段"属性的全部内容以进行匹配.您运行此查询的任何关系数据库都将通过执行全表扫描并单独检查每条记录来执行它 - 至少可以说是不可扩展的.

正如您已经发现的那样,解决方案是使用全文索引,例如Lucene.有一些用于在App Engine上运行Lucene的库,例如GAELucene.这也为您提供了正确的全文搜索功能,而不是天真的子串匹配.