对象化数据存储中的过滤子字符串
Objectify filtering substrings in Datastore
我需要创建一个能够在单词中搜索字母的高级 Query Filter
。
例如,如果我为 Angel
找到单词 gel
,它将执行匹配过滤器。
Filter propertyFilter = new FilterPredicate("name", FilterOperator.EQUAL, name);
Query<User> result = ObjectifyService.ofy().load().type(User.class)
.filter(propertyFilter);
Query
仅当单词等于匹配项时才有效。
数据存储不适合这种事情。进行前缀匹配或后缀匹配非常简单,但是字符串中间的任意文本需要索引每个可以匹配的片段;例如,Angel 变为 [Angel, ngel, gel, el, l]
。存储所有这些数据有点昂贵,而且它不能很好地扩展到长字符串。
GAE 的搜索 API 往往更适合这种事情,并且更有效地存储索引。
顺便说一句,这对数据库来说是个难题。 RDBMSes 将 LIKE '%gel%'
转换为 table 扫描,仅适用于小型数据集。全文搜索引擎通常只搜索单词,而不搜索内部子字符串。
我需要创建一个能够在单词中搜索字母的高级 Query Filter
。
例如,如果我为 Angel
找到单词 gel
,它将执行匹配过滤器。
Filter propertyFilter = new FilterPredicate("name", FilterOperator.EQUAL, name);
Query<User> result = ObjectifyService.ofy().load().type(User.class)
.filter(propertyFilter);
Query
仅当单词等于匹配项时才有效。
数据存储不适合这种事情。进行前缀匹配或后缀匹配非常简单,但是字符串中间的任意文本需要索引每个可以匹配的片段;例如,Angel 变为 [Angel, ngel, gel, el, l]
。存储所有这些数据有点昂贵,而且它不能很好地扩展到长字符串。
GAE 的搜索 API 往往更适合这种事情,并且更有效地存储索引。
顺便说一句,这对数据库来说是个难题。 RDBMSes 将 LIKE '%gel%'
转换为 table 扫描,仅适用于小型数据集。全文搜索引擎通常只搜索单词,而不搜索内部子字符串。