Simple de verdad. En SQL, si quiero buscar en un campo de texto un par de caracteres, puedo hacer:
SELECT blah FROM blah WHERE blah LIKE '%text%'
La documentación de App Engine no menciona cómo lograr esto, pero ¿seguramente es un problema bastante común?
google-app-engine
google-cloud-datastore
gql
littlecharva
fuente
fuente
Respuestas:
BigTable, que es el back-end de la base de datos para App Engine, escalará a millones de registros. Debido a esto, App Engine no le permitirá realizar ninguna consulta que resulte en un escaneo de tabla, ya que el rendimiento sería terrible para una tabla bien poblada.
En otras palabras, cada consulta debe usar un índice. Es por eso que solo puede hacer
=
,>
y<
consultas. (De hecho, también puede hacerlo,!=
pero la API lo hace utilizando una combinación de>
y<
consultas). Esta es también la razón por la cual el entorno de desarrollo supervisa todas las consultas que realiza y agrega automáticamente los índices faltantes a suindex.yaml
archivo.No hay forma de indexar una
LIKE
consulta, por lo que simplemente no está disponible.Observe esta sesión de Google IO para obtener una explicación mucho mejor y más detallada de esto.
fuente
Estoy enfrentando el mismo problema, pero encontré algo en las páginas del motor de aplicaciones de Google:
Consejo: Los filtros de consulta no tienen una forma explícita de hacer coincidir solo parte de un valor de cadena, pero puede simular una coincidencia de prefijo utilizando filtros de desigualdad:
Esto hace coincidir cada entidad MyModel con una propiedad de cadena que comienza con los caracteres abc. La cadena unicode u "\ ufffd" representa el carácter Unicode más grande posible. Cuando los valores de propiedad se ordenan en un índice, los valores que se encuentran en este rango son todos los valores que comienzan con el prefijo dado.
http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html
tal vez esto podría hacer el truco;)
fuente
Aunque App Engine no admite consultas LIKE, eche un vistazo a las propiedades ListProperty y StringListProperty . Cuando se realiza una prueba de igualdad en estas propiedades, la prueba se aplicará realmente a todos los miembros de la lista, por ejemplo,
list_property = value
prueba si el valor aparece en algún lugar de la lista.A veces, esta característica puede usarse como una solución alternativa a la falta de consultas LIKE. Por ejemplo, hace posible realizar una búsqueda de texto simple, como se describe en esta publicación .
fuente
Debe usar el servicio de búsqueda para realizar consultas de búsqueda de texto completo similares a SQL
LIKE
.Gaelyk proporciona un lenguaje específico de dominio para realizar consultas de búsqueda más fáciles de usar . Por ejemplo, el siguiente fragmento encontrará los primeros diez libros ordenados de los últimos con el título que contiene
fern
y el género que coincide exactamentethriller
:Like está escrito como el operador de partido de Groovy
=~
. Es compatible con funcionesdistance(geopoint(lat, lon), location)
como también.fuente
App Engine lanzó un servicio de búsqueda de texto completo de propósito general en la versión 1.7.0 que admite el almacén de datos.
Detalles en el anuncio .
Más información sobre cómo usar esto: https://cloud.google.com/appengine/training/fts_intro/lesson2
fuente
Eche un vistazo a Objectify aquí , es como una API de acceso al almacén de datos. Hay una pregunta frecuente con esta pregunta específicamente, aquí está la respuesta
fuente
Simplemente siga aquí: init.py # 354 "> http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/search/ init .py # 354
¡Funciona!
fuente
Probé esto con la API Java de bajo nivel GAE Datastore. Yo y funciona perfectamente
fuente
En general, a pesar de que esta es una publicación antigua, una forma de producir un 'LIKE' o 'ILIKE' es reunir todos los resultados de una consulta '> =', luego hacer un bucle en Python (o Java) para los elementos que contienen lo que 'que estas buscando.
Digamos que desea filtrar usuarios dados aq = 'luigi'
fuente
No es posible hacer una búsqueda ME GUSTA en el motor de la aplicación del almacén de datos, sin embargo, crear una Arraylist sería suficiente si necesita buscar una palabra en una cadena.
y luego buscar en el índice usando objectify.
y esto te dará una lista con todos los elementos que contienen el mundo que hiciste en la búsqueda
fuente
Si
LIKE '%text%'
siempre se compara con una palabra o unas pocas (piense en permutaciones) y sus datos cambian lentamente (lentamente significa que no es prohibitivamente costoso, tanto en términos de precio como de rendimiento, crear y actualizar índices), entonces Entidad de índice de relación (RIE) puede ser la respuestaSí, tendrá que crear una entidad de almacenamiento de datos adicional y completarla de manera adecuada. Sí, hay algunas restricciones con las que tendrá que jugar (una es el límite de 5000 en la longitud de la propiedad de lista en el almacén de datos GAE). Pero las búsquedas resultantes son muy rápidas.
Para más detalles, vea mi RIE con Java y Ojbectify y RIE con publicaciones de Python .
fuente
"Me gusta" se usa a menudo como sustituto de un pobre para la búsqueda de texto. Para la búsqueda de texto, es posible usar Whoosh-AppEngine .
fuente