Configuración del cuerpo de la consulta para Elasticsearch

Utilice un cuerpo de consulta para consultas complejas en las que necesite combinar varios criterios de búsqueda. La cláusula de consulta ayuda a decidir si un documento coincide con una búsqueda para devolver resultados más precisos.

La integración con Elasticsearch utiliza la búsqueda por palabras clave, pero puede configurar el cuerpo de la consulta como un ajuste avanzado de Elasticsearch en sus agentes para habilitar técnicas de búsqueda más avanzadas, como por ejemplo:

  • Búsqueda semántica con ELSER.
  • búsqueda de vectores densos k-nearest neighbor ( kNN ).
  • Consulta anidada para buscar en documentos anidados.
  • Búsqueda híbrida.
  • Búsqueda en un campo de texto semántico.

Búsqueda semántica con ELSER

Utilice la búsqueda semántica con ELSER para mejorar la precisión y pertinencia de las búsquedas mediante la comprensión del contexto y la intención que subyacen a las consultas de los usuarios. Para obtener más información, consulte Búsqueda semántica con ELSER Icono para redirigir a páginas externas. en Elasticsearch documentación.

El siguiente fragmento de código muestra un ejemplo de búsqueda semántica con ELSER. El ejemplo utiliza una consulta booleana Icono para redirigir a páginas externas. para buscar documentos que coincidan con combinaciones booleanas de otras consultas.

{
  "query": {
    "bool": {
      "should": [
        {
          "text_expansion": {
            "ml.tokens": {
              "model_id": ".elser_model_2_linux-x86_64",
              "model_text": "$QUERY"
            }
          }
        }
      ],
      "filter": "$FILTER"
    }
  }
}

Donde:

  • ml.tokens

    Se refiere al campo que almacena los tokens ELSER. Es posible que tenga que actualizarlo si utiliza un campo diferente en su índice. Si los tokens ELSER no están disponibles, también puede utilizar el campo que contiene el texto en bruto, pero la calidad de la búsqueda podría degradarse.

  • .elser_model_2_linux-x86-64

    Es el ID del modelo para la versión optimizada de ELSER v2, utilícelo si está disponible en su despliegue de Elasticsearch. En caso contrario, utilice .elser_model_2 para el modelo ELSER normal v2, o .elser_model_1 para ELSER v1.

  • $QUERY

    Es la variable de acceso a la consulta del usuario. Puede garantizar que la consulta del usuario se pasa al cuerpo de la consulta.

  • $FILTER

    Es la variable para acceder a los filtros personalizados que se configuran en los ajustes avanzados de Elasticsearch. Puede garantizar que los filtros personalizados se utilicen en el cuerpo de la consulta.

Utilizar una consulta anidada para buscar en documentos anidados con ELSER

La consulta anidada Icono para redirigir a páginas externas. envuelve otra consulta para buscar campos anidados dentro de su Elasticsearch índice cuando contiene documentos anidados. Si se encuentra una coincidencia, la consulta devuelve el documento raíz padre junto con los documentos anidados coincidentes. Al aplicar filtros a los resultados de la búsqueda, puede optar por filtrar los documentos principales o los documentos anidados.

Consulta de documentos externos

El siguiente fragmento de código muestra un ejemplo de consulta de los documentos externos de un índice Elasticsearch.
En el ejemplo, el documento externo es el documento principal que contiene los documentos anidados passages . La consulta nested busca dentro de los documentos anidados passages .
Si se encuentra una coincidencia dentro de los documentos anidados, la consulta devuelve el documento externo junto con los documentos anidados coincidentes.

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "passages",
            "query": {
              "text_expansion": {
                "passages.sparse.tokens": {
                  "model_id": ".elser_model_2_linux-x86_64",
                  "model_text": "$QUERY"
                  }
              }
            },
            "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}
          }
        }
      ],
      "filter": "$FILTER"
    }
  },
  "_source": false
}

Consulta de documentos internos

El siguiente fragmento de código muestra un ejemplo de consulta de documentos internos dentro de documentos anidados.
En el ejemplo, busca texto expandido dentro de documentos anidados, aplica filtros y devuelve los documentos padre con documentos anidados coincidentes, excluyendo ciertos campos de la fuente.

{
  "query": {
    "nested": {
      "path": "passages",
      "query": {
        "bool": {
          "should": [
            {
              "text_expansion": {
                "passages.sparse.tokens": {
                  "model_id": ".elser_model_2_linux-x86_64",
                  "model_text": "$QUERY"
                }
              }
            }
          ],
          "filter": "$FILTER"
        }
      },
      "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}
    }
  },
  "_source": false
}

Donde:

  • passages

    Es el campo anidado que almacena documentos internos dentro de un documento padre. Es posible que tenga que actualizarlo si utiliza un campo anidado diferente en su índice.

  • passages.sparse.tokens

    Se refiere al campo que almacena los tokens ELSER o el texto en bruto de los documentos interiores. Es posible que tenga que actualizarlo si utiliza un campo anidado diferente en su índice. Si los tokens ELSER no están disponibles, también puede utilizar el campo que contiene el texto en bruto, pero la calidad de la búsqueda podría degradarse.

  • "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}

    Excluye los tokens ELSER de los documentos interiores en los resultados de la búsqueda.

  • "_source": false

    Excluye todos los campos de nivel superior de los resultados de la búsqueda porque sólo se utilizan los documentos interiores de los resultados de la búsqueda.

  • $QUERY

    Es la variable de acceso a la consulta del usuario. Puede garantizar que la consulta del usuario se pasa al cuerpo de la consulta.

  • $FILTER

    Es la variable para acceder a los filtros personalizados que se configuran en los ajustes avanzados de Elasticsearch. Puede garantizar que los filtros personalizados se utilicen en el cuerpo de la consulta.
    Si se aplica a los documentos externos, solo los campos externos estarán disponibles para su uso en los filtros. Si se aplica en los documentos interiores, sólo los campos interiores están disponibles para su uso en los filtros.

Utilizar una consulta anidada para buscar en un campo de texto semántico

Utilice la siguiente estructura para consultar documentos anidados en un campo de texto semántico. Esta estructura garantiza que la búsqueda funcione correctamente con la integración de Elasticsearch.

{
  "query": {
    "nested": {
      "path": "semtext.inference.chunks",
      "query": {
        "sparse_vector": {
          "field": "semtext.inference.chunks.embeddings",
          "inference_id": ".elser_model_2_linux-x86_64",
          "query": "$QUERY"
        }
      },
      "inner_hits": {"_source": {"excludes": ["semtext.inference.chunks.embeddings"]}}
    }
  },
  "_source": false
}

Donde:

  • semtext

    Es el nombre del campo semántico. Es posible que tenga que actualizarlo si su campo semántico tiene un nombre diferente. Para obtener más información, consulte Tipo de campo de texto Icono para redirigir a páginas externas. semántico en Elasticsearch la documentación.

  • semtext.inference.chunks

    Se refiere al campo que almacena los textos troceados y las incrustaciones.

  • sparse_vector

    Especifica el tipo de consulta, en este caso, una consulta sparse_vector. Se trata de un tipo de consulta similar, pero más reciente, a la consulta text_expansion .

  • semtext.inference.chunks.embeddings

    Se refiere al campo que almacena las incrustaciones de los textos fragmentados.