Cuando llamas al método Index.Search
usando solo una cadena de consulta, los resultados se devuelven según las opciones de consulta predeterminadas:
- Los documentos se devuelven ordenados de mayor a menor según su rango.
- Los documentos se devuelven en grupos de 20
- 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 quieres devolver a la vez. También te permite personalizar el contenido de los documentos recuperados. Puedes solicitar solo los identificadores de los documentos o pedir que los documentos contengan solo un subconjunto de sus campos. También puedes crear campos personalizados en los documentos obtenidos mediante expresiones de campo (campos con valores derivados de otros campos del documento).
Además de las opciones de consulta, la struct `SearchOptions` también puede incluir una instancia de la struct SortOptions
. Con las opciones de ordenación, puedes cambiar el orden y ordenar los resultados por varios criterios.
SearchOptions
Estas propiedades controlan cuántos resultados se devuelven y en qué orden. Las opciones offset y cursor, que se excluyen mutuamente, admiten la paginación. Especifican qué documentos seleccionados se deben devolver en los resultados.
Propiedad | Descripción | Predeterminado | Máximo |
---|---|---|---|
Limit |
Número máximo de documentos que se devolverán en los resultados. | 20 | 1000 |
Offset |
Desplazamiento del primer documento de los resultados que se van a devolver. | 0. Los resultados contendrán todos los documentos que coincidan (hasta el límite). | 1000 |
Cursor |
Se puede usar un cursor en lugar de un desplazamiento para recuperar grupos de documentos en orden. Un cursor se actualiza a medida que se introduce y se saca de consultas consecutivas, lo que permite que cada nueva búsqueda continúe desde el final de la anterior. El cursor y el desplazamiento se explican en la página de referencia de búsqueda de Go. | Nulo. Los resultados contendrán todos los documentos que coincidan (hasta el límite). | - |
Sort |
Define una estructura SortOptions para controlar el orden de los resultados de búsqueda. Una instancia de SortOptions tiene su propio conjunto de propiedades, que se describen a continuación. |
Nulo. Ordenar por orden decreciente de la clasificación de los documentos. | - |
Estas propiedades controlan qué campos del documento aparecen en los resultados.
Propiedad | Descripción | Predeterminado |
---|---|---|
IDsOnly |
Su valor debe ser true o false . Cuando true , los documentos devueltos en los resultados solo contendrán IDs, no campos. |
false (devuelve todos los campos). |
Fields |
Especifica los campos del documento que se deben incluir en los resultados. No se pueden especificar más de 100 campos. | Devuelve todos los campos del documento (hasta 100 campos). |
Expressions |
Expresiones de campo que describen los campos calculados que se añaden a cada documento devuelto en los resultados de búsqueda. Estos campos se añaden a la propiedad expressions del documento. El valor del campo se especifica escribiendo una expresión que puede incluir uno o varios campos de documento. | Ninguno |
SortOptions
Las propiedades de SortOptions
controlan el orden y la puntuación de los resultados de búsqueda.
Propiedad | Descripción | Predeterminado |
---|---|---|
Expressions |
Una porción de SortExpressions que representa una ordenación multidimensional de documentos. |
Ninguno |
Scorer |
Se puede añadir un punto (Scorer ). Si está presente, los documentos se puntuará según la frecuencia del término de búsqueda. La puntuación estará disponible en el campo _score . Puntuarlos puede ser caro (tanto en operaciones facturables como en tiempo de ejecución) y ralentizar las búsquedas. Usa las puntuaciones con moderación. |
Ninguno |
Limit |
Número máximo de objetos que se van a calificar u ordenar. No puede ser superior a 10.000. | 1000 |
Ordenar por varias claves
Puedes ordenar los resultados de búsqueda por varias claves de ordenación. Cada clave puede ser un nombre de campo sencillo o un valor que se calcula a partir de varios campos. Esta expresión se crea según las reglas de la sección siguiente.
Un SortExpression
también define la dirección de la ordenación y un valor de clave predeterminado que se usará si no se puede calcular la expresión de un documento. Esta es la lista completa de propiedades:
Propiedad | Descripción | Predeterminado |
---|---|---|
Expr |
Una expresión que se evaluará al ordenar los resultados de cada documento coincidente. | Ninguno |
Reverse |
Si true invierte el orden de los resultados de búsqueda para que aparezcan en orden ascendente (en lugar del orden descendente predeterminado). |
false |
Default |
Valor predeterminado de la expresión si no hay ningún campo y no se puede calcular para un documento. Se debe especificar un valor de texto para las ordenaciones de texto. Se debe especificar un valor numérico para las ordenaciones numéricas. | Ninguno |
Ordenar por campos con varios valores
Cuando ordenas por un campo de varios valores de un tipo concreto, solo se usa el primer valor asignado al campo. Por ejemplo, supongamos que tienes dos documentos, DocA y DocB, que tienen un campo de texto llamado "color". Se asignan dos valores al campo "color" de DocA en el orden (rojo, azul) y dos valores a DocB en el orden (verde, rojo). Si ordenas los documentos por el campo de texto "color", el documento A se ordenará por el valor "rojo" y el documento B por el valor "verde". Los demás valores de los campos no se usan en la ordenación.
Ordenar o no ordenar
Si no especifica ninguna opción de orden, los resultados de búsqueda se devolverán automáticamente ordenados por rango descendente. En este caso, no hay límite en el número de documentos que se devuelven. Si especifica alguna opción de ordenación, esta se
llevará a cabo después de seleccionar todos los documentos coincidentes. Hay una propiedad explícita, SortOptions.Limit
, que controla el tamaño de la ordenación. Nunca podrás ordenar más de 10.000 documentos. El valor predeterminado es 1000. Si hay más documentos que coinciden que el número especificado por SortOptions.Limit
, la búsqueda solo recupera, ordena y devuelve ese número limitado. Selecciona los documentos que se van a ordenar de la lista de todos los documentos coincidentes, que está ordenada de forma descendente según la clasificación. Es posible que una consulta seleccione más documentos coincidentes de los que puedes ordenar. Si usas opciones de ordenación y es importante recuperar todos los documentos coincidentes, debes intentar asegurarte de que tu consulta no devuelva más documentos de los que puedes ordenar.
Escribir expresiones
Las expresiones se usan para definir expresiones de campo (que se definen en SearchOptions
) y expresiones de orden, que se definen en SortOptions
. Se escriben como cadenas:
"price * quantity"
"(men + women)/2"
"min(daily_use, 10) * rate"
"snippet('rose', flower, 120)"
Las expresiones que incluyan campos de número pueden usar los operadores aritméticos (+, -, *, /) y las funciones numéricas integradas que se indican a continuación. Las expresiones que incluyan campos de tipo geopunto pueden usar las funciones geopunto y distancia. Las expresiones de los 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 rank de un documento. Se puede usar en expresiones de campo y de orden. |
_score |
La puntuación asignada a un documento cuando incluyes un Scorer en el SortOptions . Este término solo puede aparecer en expresiones de ordenación; no se puede usar en expresiones de campo. |
Funciones numéricas
Las expresiones para definir los valores numéricos de FieldExpressions
y SortExpressions
pueden usar estas funciones integradas. Los argumentos deben ser números, nombres de campo o expresiones que usen números y nombres de campo.
Función | Descripción | Ejemplo |
---|---|---|
max |
Devuelve el mayor de sus argumentos. | max(recommended_retail_price, discount_price, wholesale_price) |
min |
Devuelve el menor de sus argumentos. | min(height, width, length) |
log |
Devuelve el logaritmo natural. | log(x) |
abs |
Devuelve el valor absoluto. | abs(x) |
pow |
Usa dos argumentos numéricos. La llamada pow(x, y) calcula el valor de x elevado a la potencia y. | pow(x, 2) |
count |
Usa el nombre de un campo como argumento. Devuelve el número de campos del documento con ese nombre. Recuerda que un documento puede contener varios campos de diferentes tipos con el mismo nombre. Nota: count solo se puede usar en FieldExpressions . No puede aparecer en SortExpressions . |
count(user) |
Funciones de geopunto
Estas funciones se pueden usar en expresiones que incluyan campos de geopunto.
Función | Descripción | Ejemplo |
---|---|---|
geopoint |
Define un punto geográfico a partir de una latitud y una longitud. | 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 geopunto o una invocación de la función geopunto. Sin embargo, solo un argumento puede ser un nombre de campo. | distance(geopoint(23, 134), store_location) |
Fragmentos
Un fragmento es un fragmento de un campo de texto que coincide con una cadena de consulta e incluye el texto circundante. Los fragmentos se crean llamando a la función snippet
:
snippet(query, body, [max_chars])
query
- Cadena de consulta entre comillas que especifica el texto que se va a buscar en el campo.
body
- Nombre de un campo de texto, HTML o Atom.
max_chars
- Número máximo de caracteres que se devolverán en el fragmento. Este argumento es opcional y su valor predeterminado es 160 caracteres.
La función devuelve una cadena HTML. La cadena contiene un fragmento del valor del campo body, con el texto que ha coincidido con la consulta en negrita.