Cuando llamas al método Index.Search
solo mediante una string de consulta, 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 estructura SearchOptions
como argumento de Search
para cambiar estas opciones.
La estructura SearchOptions
te permite especificar cuántos documentos se muestran a la vez. Además, te permite personalizar los contenidos de los documentos recuperados. Puedes solicitar solo identificadores de documentos o solicitar que los documentos contengan solo un subconjunto de sus campos. También puedes crear campos personalizados en los documentos recuperados mediante expresiones de campo (campos con valores derivados de otros campos del documento).
Además de las opciones de la consulta, la estructura “SearchOptions” también puede incluir una instancia de la estructura SortOptions
. Con las opciones de orden de esta clase, puedes cambiar el orden y ordenar los resultados según diferentes claves.
SearchOptions
Estas propiedades controlan cuántos resultados se muestran 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 |
Offset |
El desplazamiento del primer documento en los resultados que se mostrarán. | 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 pasa por consultas consecutivas, lo que permite que cada nueva búsqueda continúe desde el final de la anterior. El uso de cursores y desplazamientos se analiza en la página de referencia de búsqueda en Go. | Nulo. Los resultados incluirán todos los documentos que coincidan (hasta llegar al límite). | - |
Sort |
Establece una estructura 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 |
---|---|---|
IDsOnly |
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). |
Fields |
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). |
Expressions |
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 |
SortOptions
Las propiedades de SortOptions
controlan el orden y la puntuación de los resultados de la búsqueda.
Propiedad | Descripción | Predeterminado |
---|---|---|
Expressions |
Es una porción de SortExpressions que representa un orden multidimensional de los documentos. |
Ninguno |
Scorer |
Una Scorer 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 a partir de varios campos. Esta expresión se construye de acuerdo con las reglas de la siguiente sección.
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 |
---|---|---|
Expr |
Una expresión que se evalúa cuando se ordenan los resultados para cada documento que coincide. | Ninguno |
Reverse |
Si es true , se invierte el orden de los resultados de la búsqueda de modo que aparezcan en orden ascendente (en lugar del orden descendente predeterminado). |
false |
Default |
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 coincidentes que la cantidad que especifica SortOptions.Limit
, la búsqueda solo recupera, ordena y muestra esa cantidad limitada. Se seleccionan los documentos que se deben ordenar de la lista de todos los documentos que coinciden, cuyo orden de clasificación es 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 (que se establecen en SearchOptions
) y expresiones de orden, que se establecen en 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 Scorer 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.