Cuando llamas al método search()
mediante una cadena de consulta independiente, los resultados se muestran de acuerdo con las opciones de consulta predeterminadas:
- Los documentos se muestran en un orden de clasificación descendiente.
- Se muestran los documentos en grupos de 20 por vez.
- Los documentos recuperados contienen todos sus campos originales
Puedes usar una instancia de la clase Query como el argumento para search()
a fin de cambiar estas opciones.
La clase Query te permite especificar cuántos documentos se muestran a la vez. También permite personalizar los contenidos de los documentos recuperados. Puedes pedir solo documentos identificadores o solicitar que los documentos contengan solo un subconjunto de sus campos. También puedes crear campos personalizados en los documentos recuperados: fragmentos (recortes de campos de texto que muestran el texto que rodea a una string coincidente) y expresiones de campo (campos con valores derivados de otros campos del documento).
Además de las opciones de consulta, la clase Query puede incluir una instancia de la clase SortOptions
. Con las opciones de orden de esta clase, puedes cambiar el orden y ordenar los resultados según diferentes claves.
Cómo realizar una búsqueda con la clase Query
Cuando realizas una búsqueda con una instancia de la clase Query, debes construir una instancia de la clase a través de varios pasos. Este es el orden general:
- Crea una string de consulta.
- Crea
SortOptions
si es necesaria. - Crea
QueryOptions
. - Crear un objeto Query que incluya la string de consulta y las
QueryOptions
(opcionales). - Llama al método de búsqueda en el objeto Query.
Las distintas opciones de consulta y orden se especifican mediante un llamado a los métodos set en las instancias de las clases QueryOptions.Builder
y SortOptions.Builder
, como en este ejemplo:
QueryOptions
Debes usar QueryOptions.Builder
para configurar las opciones de consulta. No tienes acceso directo a estas propiedades.
Estas propiedades controlan cuántos resultados mostrar y en qué orden. Las opciones de offset y cursor, que son mutuamente excluyentes, son compatibles con la paginación. Especifican qué documentos seleccionados mostrar en los resultados.
Propiedad | Descripción | Predeterminado | Máximo |
---|---|---|---|
Limit |
El máximo número de documentos que se muestran en los resultados. | 20 | 1000 |
NumberFoundAccuracy |
Esta propiedad determina la exactitud del resultado que muestra Results.getNumberFound() . Establece un límite de coincidencias que se cuentan realmente, y detiene la búsqueda cuando se alcanza el límite. Si la cantidad de coincidencias en el índice es menor o igual que el límite, el conteo que se muestra es exacto. Si no, el conteo es una estimación basada en las coincidencias que se encontraron y en el tamaño y estructura del índice. Ten en cuenta que establecer un valor alto para esta propiedad puede afectar la complejidad de la búsqueda y producir tiempos de espera. |
Si no se especifica, la precisión se establece en el mismo valor que Limit . |
25000 |
Offset |
El offset del primer documento en los resultados que se muestran. | 0. Los resultados incluirán todos los documentos que coincidan (hasta llegar al límite). | 1,000 |
Cursor |
Puede usarse un cursor en lugar de un offset para recuperar grupos de documentos en un orden determinado. El cursor se actualiza a medida que entra y sale de consultas consecutivas, lo que permite que cada nueva búsqueda se continúe desde el final de la anterior. El cursor y el offset se explican en la página Administrar resultados. | Nulo. Los resultados incluirán todos los documentos que coincidan (hasta llegar al límite). | - |
SortOptions |
Establece un objeto SortOptions para controlar el orden de los resultados de la búsqueda. Una instancia de SortOptions tiene su propio conjunto de propiedades, que se describen a continuación. |
Nulo. Ordenar por clasificación descendiente de documentos. | - |
Estas propiedades controlan qué campos de los documentos aparecen en los resultados.
Propiedad | Descripción | Predeterminado |
---|---|---|
ReturningIdsOnly |
Se establece en True o False . Cuando se establece en True , los documentos que se muestran en los resultados solo contienen ID, sin campos. |
False (muestra todos los campos). |
FieldsToReturn |
Especifica qué campos del documento se incluyen en los resultados. Pueden especificarse no más de 100 campos. | Mostrar todos los campos de documentos (hasta 100 campos). |
ExpressionsToReturn |
Expresiones de campo que describen campos calculados que se agregan a cada documento que se muestra en los resultados de la búsqueda. Estos campos se agregan a la propiedad de expresiones del documento. Este valor de campo se especifica escribiendo una expresión que puede incluir uno o más campos de documentos. | Ninguno |
FieldsToSnippet |
Lista de nombres de campos de texto. Se genera un fragmento para cada campo. Este es un campo calculado que se agrega a la propiedad de expresiones de los documentos en los resultados de la búsqueda. El campo del fragmento tiene el mismo nombre que su campo de origen. De forma implícita, esta opción usa la función de fragmento con solo dos argumentos y crea un fragmento con una string coincidente como máximo, en función de la misma string de consulta que usó la búsqueda a fin de recuperar los resultados: snippet("query-string", field-name) .También puedes crear fragmentos personalizados con la opción ExpressionsToReturn . Para ello, agrega una expresión de campo que llame de forma explícita a la función de fragmento. |
Ninguno |
SortOptions
Las propiedades de SortOptions
controlan el orden y la puntuación de los resultados de la búsqueda. Debes usar SortOptions.Builder
para configurar las opciones de orden. No tienes acceso directo a estas propiedades.
Las propiedades de SortOptions
controlan el orden y la puntuación de los resultados de la búsqueda.
Propiedad | Descripción | Predeterminado |
---|---|---|
SortExpressions |
Es una lista de SortExpressions que representa un orden multidimensional de los documentos. |
Ninguno |
MatchScorer |
Es un objeto MatchScorer opcional. Cuando está presente, esta propiedad hace que los documentos se puntúen de acuerdo con la frecuencia del término de búsqueda. La puntuación estará disponible como el campo _score . Puntuar documentos puede ser costoso (tanto en operaciones facturables como en tiempo de ejecución) y puede ralentizar tus búsquedas. Usa la puntuación con moderación. |
Ninguno |
Limit |
Número máximo de objetos que se ordenan o puntúan. No puede ser mayor a 10,000. | 1,000 |
Ordenar en varias claves
Puedes ordenar los resultados de la búsqueda en múltiples claves de orden. Cada clave puede ser un simple nombre de campo, o un valor que se calcula en varios campos.
Ten en cuenta que el término “expresión” se usa con varios significados cuando nos referimos a las opciones de orden: el SortOption
en sí tiene un atributo de expresiones. Este atributo es una lista de objetos SortExpression
que corresponden a claves de orden. Por último, cada objeto SortExpression
contiene un atributo de expresión que especifica cómo calcular el valor de la clave de orden. Esta expresión se construye de acuerdo con las reglas de la sección siguiente.
Un SortExpression
también define la dirección del orden y un valor de clave predeterminado a fin de usarse si no se puede calcular la expresión para un documento determinado. A continuación, puedes ver la lista completa de propiedades:
Propiedad | Descripción | Predeterminado |
---|---|---|
Expression |
Una expresión que se evalúa cuando se ordenan los resultados para cada documento que coincide. | Ninguno |
Direction |
La dirección para ordenar los resultados de la búsqueda, puede ser ASCENDING o DESCENDING . |
DESCENDING |
DefaultValue DefaultValueDate DefaultValueNumber |
El valor predeterminado de la expresión, si no hay ningún campo presente y no se puede calcular para un documento determinado. Debe especificarse un valor de texto para los órdenes de texto. Debe especificarse un valor numérico para los órdenes numéricos. | Ninguno |
Ordenar en campos de valores múltiples
Cuando ordenas en un campo con varios valores de un tipo particular, solo se usa el primer valor asignado al campo. Por ejemplo, considera dos documentos, DocA y DocB, que tienen un campo de texto llamado “color”. Se asignan dos valores al campo de "color" de DocA en el orden (rojo, azul), y dos valores a DocB en el orden (verde, rojo). Cuando ordenas y especificas el campo de texto “color”, DocA se ordena con el valor “rojo” y DocB con el valor “verde”. No se usan los otros valores de campo en el orden.
Ordenar o no ordenar
Si no especificas ninguna opción de orden, los resultados de la búsqueda se muestran automáticamente por orden de clasificación descendiente. No hay un límite para el número de documentos que se muestran en este caso. Si especificas opciones de orden, el orden se realiza después de que se seleccionan los documentos que coinciden. Hay una propiedad explícita, "SortOptions.limit", que controla el tamaño del orden. No podrás ordenar más de 10,000 documentos; el tamaño predeterminado es 1,000. Si hay más documentos que coinciden que el número especificado en "SortOptions.limit", la búsqueda solo recupera, ordena y muestra esa cantidad limitada. Se seleccionan los documentos para ordenar de la lista de todos los documentos que coinciden, que está ordenada por clasificación descendiente. Es posible que una consulta seleccione más documentos que coinciden de los que puedes ordenar. Si usas opciones de orden y es importante que recuperes todos los documentos que coinciden, debes intentar asegurarte de que tu búsqueda no muestre más resultados que los que puedes ordenar.
Escritura de expresiones
Las expresiones se usan para definir expresiones de campo (lo que se configura en “QueryOptions”) y para ordenar las expresiones (lo que se configura en las SortOptions
). Se escriben como strings:
"price * quantity"
"(men + women)/2"
"min(daily_use, 10) * rate"
"snippet('rose', flower, 120)"
Las expresiones que incluyen campos de número pueden usar los operadores aritméticos (+, -, *, /) y las funciones numéricas incorporadas detalladas a continuación. Las expresiones que incluyen campos de puntos geográficos pueden usar las funciones de punto geográfico y distancia. Las expresiones para campos de texto y HTML pueden usar la función de fragmento.
Las expresiones también pueden incluir estos términos especiales:
Término | Descripción |
---|---|
_rank |
La propiedad de clasificación. Se puede usar en expresiones de campo y expresiones de orden. |
_score |
Es la puntuación asignada a un documento cuando incluyes MatchScorer en SortOptions . Este término solo puede aparecer en expresiones de orden; no puede usarse en expresiones de campo. |
Funciones numéricas
Las expresiones que definen los valores numéricos para FieldExpressions
y SortExpressions
pueden usar las siguientes funciones integradas. Los argumentos deben ser números, nombres de campos o expresiones que usen números o nombres de campos.
Función | Descripción | Ejemplo |
---|---|---|
max |
Muestra el mayor de sus argumentos. | max(recommended_retail_price, discount_price, wholesale_price) |
min |
Muestra el menor de sus argumentos. | min(height, width, length) |
log |
Muestra el algoritmo natural. | log(x) |
abs |
Muestra el valor absoluto. | abs(x) |
pow |
Toma dos argumentos numéricos. La llamada pow(x, y) calcula el valor de x elevado a la potencia y. | pow(x, 2) |
count |
Toma un nombre de campo de su argumento. Muestra el número de campos en el documento con ese nombre. No olvides que un documento puede contener varios campos de tipos diferentes con el mismo nombre. Nota: count solo se puede usar en FieldExpressions . No puede aparecer en SortExpressions . |
count(user) |
Funciones de puntos geográficos
Estas funciones pueden usarse para expresiones que incluyen campos de puntos geográficos.
Función | Descripción | Ejemplo |
---|---|---|
geopoint |
Define un punto geográfico con una latitud y longitud determinadas. | geopoint(-31.3, 151.4) |
distance |
Calcula la distancia en metros entre dos puntos geográficos. Ten en cuenta que cualquiera de los dos argumentos puede ser el nombre de un campo de punto geográfico o una invocación de la función de punto geográfico. Sin embargo, solo un argumento puede ser un nombre de campo. | distance(geopoint(23, 134), store_location) |
Fragmentos
Un fragmento es un recorte de un campo de texto que coincide con una string de consulta y abarca el texto que lo rodea. Los fragmentos se crean mediante una llamada a la función snippet
:
snippet(query, body, [max_chars])
query
- Una string de consulta entre comillas que especifica el texto que debe encontrarse en el campo.
body
- El nombre de un campo de texto, HTML o atómico.
max_chars
- La cantidad máxima de caracteres que se pueden mostrar en el fragmento. Este argumento es opcional, la cantidad predeterminada es de 160 caracteres.
La función muestra una string HTML. La string contiene un fragmento del valor del campo del cuerpo, con el texto que coincidió con la consulta en negrita.