Una cláusula de filtro restringe los resultados de búsqueda al aplicar condiciones de campo sobre una cláusula de consulta. Esta opera exclusivamente sobre campos de atributo.
Sintaxis
filter=<field><operator><value>
Combine varias condiciones con operadores lógicos:
filter=category=2 AND (hit+sale)*rate>10000
Operadores
|
Tipo |
Operadores compatibles |
||||
|
Relacionales |
|
||||
|
Aritméticos |
|
` |
|||
|
Lógicos |
|
||||
|
Pertenencia a lista |
|
v2 |
v3")`, |
v2 |
v3")` |
Restricciones por tipo de campo
|
Tipo de campo |
Operadores compatibles |
Notas |
|
INT, INT32, INT64 |
Todos los relacionales y aritméticos |
Utilice |
|
FLOAT, DOUBLE |
|
Evite usar |
|
LITERAL |
Solo |
Los campos LITERAL no se tokenizan, por lo que solo admiten coincidencias exactas; encierre los valores entre comillas dobles, por ejemplo, |
|
INT_ARRAY, FLOAT_ARRAY, DOUBLE_ARRAY, LITERAL_ARRAY |
Relacionales y aritméticos |
Use |
|
TEXT, SHORT_TEXT |
No compatible |
Estos tipos no pueden configurarse como campos de atributo ni utilizarse en cláusulas de filtro |
|
ARRAY (genérico) |
No compatible con |
Los campos que usan un analizador para búsquedas difusas también quedan excluidos de |
Notas:
La cláusula de filtro es opcional.
Todos los campos referenciados en una cláusula de filtro deben configurarse como campos de atributo en el esquema de la aplicación. Los campos de tipo TEXT y SHORT_TEXT no admiten esta configuración.
Las funciones integradas, como
distance, pueden emplearse en cláusulas de filtro para ordenar resultados.
Funciones integradas
A continuación se presentan funciones que amplían el filtrado más allá de las comparaciones simples de campos.
distance: filtrado por proximidad geográfica
Devuelve la distancia esférica entre una ubicación almacenada y un punto de consulta. Utilícela en escenarios de servicios basados en ubicación (LBS) donde necesite limitar los resultados a un radio geográfico específico.
Los campos lon y lat deben configurarse como campos de atributo.
Ejemplo: Buscar ubicaciones de KFC dentro de un radio de 10 km respecto a un usuario situado en la longitud 120.34256 y latitud 30.56982.
query=default:'KFC'&&sort=+distance(lon,lat,"120.34256","30.56982")
in_polygon: filtrado por área de entrega o límite de servicio
Verifica si un punto fijo (proporcionado en la consulta) se encuentra dentro de un polígono almacenado en un campo del documento. Esta función resulta útil cuando cada documento define un área geográfica (como el radio de entrega de un comerciante) y usted desea identificar las áreas que contienen la ubicación de un usuario específico.
Ejemplo: Encontrar comerciantes cuyas áreas de entrega cubran al usuario ubicado en las coordenadas (120.307234, 39.294245), donde el campo coordinates almacena el polígono de entrega de cada comerciante.
query=default:'Foods'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0
in_query_polygon: filtrado por un área definida en la consulta
Determina si un punto almacenado en un documento cae dentro de un polígono definido en la consulta. Emplee esta opción cuando requiera buscar dentro de un límite geográfico personalizado, como un distrito comercial.
Los vértices del polígono se pasan mediante kvpairs. El campo point almacena la ubicación geográfica de cada documento.
Ejemplo: Localizar sucursales de KFC dentro del distrito comercial Yintai.
query=default:'KFC'&&filter=in_query_polygon("polygons",point)>0&&kvpairs=polygons:xA\,yA\,xB\,Yb\,xC\,Yc;xD\,yD\,xE\,yE\,xF\,yF\,xG\,yG
bit_struct: filtrado por arreglos de enteros empaquetados en bits
Divide cada entero de 64 bits en un campo INT_ARRAY en rangos de bits con nombre y evalúa una condición sobre ellos. Resulta adecuado cuando un solo campo codifica varios atributos (como horarios de apertura y cierre) empaquetados en segmentos de bits.
Ejemplo: Buscar tiendas abiertas entre las 14:00 (840 minutos) y las 15:30 (930 minutos). El campo open_time es de tipo INT64_ARRAY. Cada entero almacena la hora de apertura en los bits 0–31 y la hora de cierre en los bits 32–63.
filter=bit_struct(open_time, "0-31,32-63","overlap,$1,$2,840,930")!=-1
fieldlen: filtrado por longitud de campo
Devuelve la longitud en caracteres de un campo LITERAL. Utilice esta función para excluir valores vacíos o excesivamente largos.
Ejemplo: Devolver únicamente documentos donde usr_name no esté vacío.
query=default:'Keyword'&&filter=fieldlen(usr_name)>0
in y notin: filtrado por una lista de valores
Comprueba si el valor de un campo aparece (o está ausente) en una lista separada por tuberías. Tipos compatibles: INT, LITERAL, FLOAT, DOUBLE. No es compatible con ARRAY, TEXT ni campos que utilicen un analizador.
Para obtener más información, consulte in and notin.
Ejemplo: Devolver documentos que contengan "iphone" donde el campo INT type sea 1, 2 o 3.
query=default:'iphone'&&filter=in(type, "1|2|3")
Ejemplo: Excluir documentos donde el campo INT32 type sea 1, 2 o 3.
query=default:'iphone'&&filter=notin(type, "1|2|3")
multi_attr: filtrado por un elemento específico en un campo de arreglo
Devuelve el valor en una posición determinada dentro de un campo de arreglo. Este método es apropiado cuando un campo almacena múltiples valores para distintos atributos (como precio de mercado, precio con descuento y precio de venta) y se requiere filtrar por una posición específica.
Ejemplo: Buscar celulares cuyo precio de venta (posición 2 en el campo price) sea menor a 1,000.
query=default:'Mobile phone'&&filter=multi_attr(price,2)<1000
Ejemplos
Filtrado por un campo INT
El campo category (INT32) utiliza 1 para noticias y 2 para BBS. Para encontrar documentos sobre "Zhejiang University" en la categoría BBS, use cualquiera de las siguientes opciones:
query=default:'Zhejiang University' AND category_search:'2'
query=default:'Zhejiang University'&&filter=category=2
Filtrado por un campo de arreglo LITERAL
En una aplicación de búsqueda de novelas, el campo tags (STRING_ARRAY) almacena etiquetas de género como "palace", "suspense and horror" y "romance". Para obtener resultados del género palaciego correspondientes a "Empresses in the Palace":
query=default:'Empresses in the Palace'&&filter=tags="palace"
Combinación de operadores aritméticos y relacionales
En una aplicación de comercio electrónico, busque productos de vestidos donde la puntuación combinada de interacción (hit + sale) * rate supere los 10,000 y la publicación se haya creado antes de la marca de tiempo 1402345600:
query=default:'dress'&&filter=(hit+sale)*rate>10000 AND create_time<1402345600