tutorial pricing prices google flexible español engine app google-app-engine objectify

google app engine - pricing - Buscar subcadena dentro de una entidad usando objectify



google app engine tutorial español (4)

He usado el método de tokenización. Aquí está el código en Java:

private String tokenize(String phrase) { StringBuilder tokens = new StringBuilder(); try { for (String word : phrase.split(" ")) { if (word.length() < 1) { continue; } int j = 1; while (true) { for (int i = 0; i < word.length() - j + 1; i++) { tokens.append(word.substring(i, i + j)).append(" "); } if (j == word.length()) { break; } j++; } } } catch (Throwable t) { t.printStackTrace(); } return tokens.toString();}

Esto permite definir un campo indexable, luego procesar consultas estándar de Ofy y SearchService.

Tengo una entidad llamada lastName con el valor "Benjamin". ¿Hay alguna manera en objectify que si el usuario pone "Ben" o "jam" o "Benja". Todavía puedo encontrar esta entidad usando query.filter (). Debo usar la consulta ya que hay otros criterios de búsqueda iam checking.

Vi algo en "Obgaektify" llamado operador "starts with". Pero no está funcionando. Cualquier sugerencia sera apreciada. Gracias


No existe un índice estándar existente para consultas con contenido similar. Por cierto, siempre puedes presentar el tuyo. En este caso puedes hacer:

  1. agregar y campo sintético como String[] lastNameIndex
  2. agregue el método marcado como @PrePersist que completará el campo lastNameIndex con todas las combinaciones disponibles
  3. Cuando desee encontrar entidades que usen este índice, query.filter(''lastNameIndex ='', val)

Poniendo la respuesta de Chris y el comentario de Nick juntos, aquí está el código para construir un filtro de consulta para Objectify V4:

public <T> Query<T> fieldStartsWith(Query<T> query, String field, String search){ query = query.filter(field + " >=", search); return query.filter(field + " <", searchStr+"/ufffd"); }


No hay consultas de tipo "ME GUSTA" para la subcadena, sin embargo, se puede simular un "inicio con" sensible a mayúsculas y minúsculas aprovechando los operadores > y < en los índices.

// The start string String searchStr = "Ben"; // emulate a "starts with" query Query q = new Query("MyEntity") q.addFilter("name", Query.FilterOperator.GREATER_THAN_OR_EQUAL, searchStr); q.addFilter("name", Query.FilterOperator.LESS_THAN, searchStr + "/ufffd");

La consulta ''buscará'' la propiedad del name para los elementos que comienzan con "Ben", y son inferiores a "Ben/ufffd" , donde /ufffd es el máximo carácter Unicode posible.