我正在使用Google App Engine(Java)和JDO。如何执行JDO等效的操作?
select * from table where field like '%foo%'
到目前为止,我看到的唯一建议是使用Lucene。我有点惊讶,这么基本的功能在GAE开箱即用的情况下却不可行。
select * from table where field like '%foo%'
到目前为止,我看到的唯一建议是使用Lucene。我有点惊讶,这么基本的功能在GAE开箱即用的情况下却不可行。
简而言之: 管理自己的多值搜索属性并执行相等查询。
详情: 对于那些寻求简单和自助的人,您可以按照以下步骤操作:
在您的实体上创建一个多值属性 searchTerms
。这将包含实体的可搜索项。
将实体的可搜索文本拆分成单词。这些单词将是实体唯一可搜索的部分。您可以从空格处开始拆分,或者您可以添加一些基本的词干处理。例如,在处理电子邮件地址时,您可能希望将用户和域部分分开,以便两者都可以进行搜索。如果更新了实体,则需要重新构建此属性。
要执行搜索,请将搜索输入拆分为单词(如有必要,执行基本的词干处理),并使用等于运算符将每个单词作为过滤器添加到 searchTerms
属性中。
(多值属性上的 =
运算符询问是否有任何值等于过滤器。)
例如(使用 Objectify):
Query query = dao.ofy().query(Recipe.class);
for (String term : search.toLowerCase().split(" ")) {
query = query.filter("searchTerms =", term);
}