Todos los productos
Search
Centro de documentos

OpenSearch:Cláusula de filtro

Última actualización: Sep 04, 2026

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

AND, OR, () — deben escribirse en mayúsculas

Pertenencia a lista

`in(field, "v1

v2

v3")`, `notin(field, "v1

v2

v3")`

Restricciones por tipo de campo

Tipo de campo

Operadores compatibles

Notas

INT, INT32, INT64

Todos los relacionales y aritméticos

Utilice in/notin para verificar la pertenencia a listas (solo INT e INT32; consulte in and notin para conocer los tipos compatibles)

FLOAT, DOUBLE

>, <, <=, >=, !=

Evite usar =, ya que la precisión de punto flotante hace que la igualdad exacta no sea confiable

LITERAL

Solo = y !=

Los campos LITERAL no se tokenizan, por lo que solo admiten coincidencias exactas; encierre los valores entre comillas dobles, por ejemplo, tags="palace". Si omite las comillas, se genera el error 6135: "The value type of the constant expression is invalid"

INT_ARRAY, FLOAT_ARRAY, DOUBLE_ARRAY, LITERAL_ARRAY

Relacionales y aritméticos

Use bit_struct para operaciones a nivel de bits en elementos INT_ARRAY

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 in/notin

Los campos que usan un analizador para búsquedas difusas también quedan excluidos de in/notin

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