Motores de búsqueda

El enfoque tradicional para la generación de candidatos mediante la búsqueda de k-NN (vecinos más cercanos a k) es preciso pero muy lento, especialmente para sistemas a gran escala donde se requiere una latencia muy baja.

La búsqueda de ANN (vecino más cercano aproximado) utiliza herramientas que reestructuran los índices de manera más eficiente y reducen la dimensionalidad de los vectores que se pueden buscar. Utilizar este enfoque es una compensación entre la precisión y la baja latencia. Al aprovechar ANN con k-NN, los motores de búsqueda pueden aproximarse a los vecinos más cercanos de documentos de consulta específicos y recuperar candidatos relevantes con una latencia muy baja, lo que mejora la latencia de búsqueda para grandes conjuntos de datos. OpenSearch 2.11 es compatible con los motores de búsqueda NMSLIB, FAISS y LUCENE, que todos implementan ANN. Para obtener más información, consulte búsqueda k-NN con filtros.

Motor Lucene

El filtro K-NN de Lucene utiliza el gráfico de HNSW en la implementación.

En el siguiente ejemplo se muestra la creación de un índice mediante el motor Lucene:

PUT /test-index
{
  "settings": {
    "index": {
      "knn": true,
      "knn.algo_param.ef_search": 100,
      "number_of_shards": 1,
      "number_of_replicas": 0
    }
  },
  "mappings": {
    "properties": {
      "location": {
        "type": "knn_vector",
        "dimension": 2,
        "method": {
          "name": "hnsw",
          "space_type": "l2",
          "engine": "lucene",
          "parameters": {
            "ef_construction": 100,
            "m": 16
          }
        }
      }
    }
  }
}

Para utilizar un pipeline de ingestión en el índice, agregue el pipeline en la llamada de API y asegúrese de que el modelo desplegado en el pipeline de ingestión tenga la misma dimensionalidad del vector KNN especificado en la llamada de API, de la siguiente manera:

PUT /test-lucene-index
{
  "settings": {
    "default_pipeline": "test-nlp-pipeline",
    "index": {
      "knn": true,
      "knn.algo_param.ef_search": 100,
      "number_of_shards": 1,
      "number_of_replicas": 0
    }
  },
  "mappings": {
    "properties": {
      "location": {
        "type": "knn_vector",
        "dimension": 2,
        "method": {
          "name": "hnsw",
          "space_type": "l2",
          "engine": "lucene",
          "parameters": {
            "ef_construction": 100,
            "m": 16
          }
        }
      }
    }
  }
}

Motor Faiss

Para el motor Faiss, puede utilizar el algoritmo HNSW o el algoritmo IVF para implementar el filtro ANN. Consulte Implementación de filtro Faiss k-NN para obtener más información sobre los parámetros de configuración de Faiss.

Los siguientes ejemplos muestran cómo crear un índice utilizando el motor Faiss.

Sin un pipeline de ingesta:

PUT /test-faiss-index
{
  "settings": {
    "index": {
      "knn": true
    }
  },
  "mappings": {
    "properties": {
      "item_vector": {
        "type": "knn_vector",
        "dimension": 3,
        "method": {
          "name": "hnsw",
          "space_type": "l2",
          "engine": "faiss"
        }
      }
    }
  }
}

Con un pipeline de ingestión

PUT /test-faiss-index
{
  "settings": {
    "index": {
      "knn": true
    },
   "default_pipeline": "test-nlp-pipeline"
  },
  "mappings": {
    "properties": {
      "item_vector": {
        "type": "knn_vector",
        "dimension": 3,
        "method": {
          "name": "hnsw",
          "space_type": "l2",
          "engine": "faiss"
        }
      }
    }
  }
}

Motor NMSLIB

El siguiente ejemplo muestra cómo crear un índice mediante el motor nmslib:

PUT /nmslib-index
{
    "settings": {
        "index.knn": true,
        "default_pipeline": "test-nlp-pipeline"
    },
    "mappings": {
        "properties": {
            "passage_embedding": {
                "type": "knn_vector",
                "dimension": 1024,
                "method": {
                    "name":"hnsw",
                    "engine":"nmslib",
                    "space_type": "cosinesimil"
                }
            },
            "passage_text": {
                "type": "text"
            }
        }
    }
}

Espacios

Cada uno de los motores admitidos utiliza alguna heurística para comparar la incrustación de documentos y recuperar los documentos más relevantes midiendo la similitud. Tiene la opción de utilizar varias métricas objetivas. Las métricas que elija dependen del caso de uso, el modelo y los datos personalizados. Para obtener más información, incluida una tabla que muestra las opciones disponibles para elegir, consulte Espacios.