elasticsearch.BadRequestError:400,'search_phase_execution_exception','运行时错误'

oknwwptz  于 2023-10-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(325)

当我执行下面的代码时,我的代码崩溃了,我必须说我已经在ES中索引了文档

db = ElasticVectorSearch(
    elasticsearch_url=url,  # it is fine, I didnt change it
    index_name=os.environ["ELASTICSEARCH_INDEX_NAME"],
    embedding=OpenAIEmbeddings(openai_api_key=os.environ["OPENAI_API_KEY"],
                         deployment=os.environ["AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT"]),
    ssl_verify={"ca_certs": os.environ["APP_LANGCHAIN_CERT_PATH"]})

docs = db.similarity_search(query="my query", 
                            k=10)

谢谢你
它是工作之前,我删除了索引,我创建他们与

client.options(ignore_status=400).indices.create(index=os.environ["ELASTICSEARCH_INDEX"])
xytpbqjk

xytpbqjk1#

您需要创建一个索引,其Map包含dense_vector类型的vector字段,正如您在langchain创建的默认Map中所看到的那样。这可能是你以前的索引中的情况。
你可以模仿langchain代码的功能,并像这样做(确保dims匹配OpenAI创建的维数,通常是1536):

mapping = {
    "properties": {
        "text": {"type": "text"},
        "vector": {"type": "dense_vector", "dims": 1536},
    }
}  
client.options(ignore_status=400).indices.create(index = os.environ["ELASTICSEARCH_INDEX_NAME"], mapping=mapping)

请注意,从源代码判断,我不确定为什么langchain不创建索引,如果它不存在。

相关问题