Elasticsearch的Dense vector字段类型用于存储密集的向量(例如,浮点数数组),通常用于机器学习模型的特征向量。这些向量可以用来计算文档之间的相似度。
本文将介绍Dense vector字段类型在Elasticsearch中的使用。
一、创建映射(Mapping)在Elasticsearch中创建一个索引,并为该索引定义一个映射(Mapping)。在这个映射中,我们可以指定一个字段为Dense vector类型,并指定向量的维度。
PUT /my_index{ "mappings": { "properties": { "my_vector": { "type": "dense_vector", "dims": 3 // 指定向量的维度为3 }, "my_text": { "type": "text" } } }}在这个例子中,我们创建了一个名为my_index的索引,其中包含一个名为my_vector的Dense vector字段和一个名为my_text的文本字段。
GET my_index/_mapping
二、索引文档 (Indexing Documents)接下来,我们可以开始索引包含Dense vector的文档。
PUT /my_index/_doc/1{ "my_text": "文本内容", "my_vector": [1.5, 2.5, 3.5]}我们向my_index索引中添加了一个文档,其中my_vector字段是一个三维向量。
三、使用向量进行搜索 (Searching with Vectors)我们可以使用向量字段进行相似度搜索。例如,可以使用余弦相似度函数找到与给定向量最相似的文档。
POST /my_index/_search{ "query": { "script_score": { "query" : { "match_all": {} }, "script": { "source": "cosineSimilarity(params.query_vector, 'my_vector') + 1.0", "params": { "query_vector": [4, 3.5, 4] } } } }}在示例中,我们使用了script_score查询来计算每个文档的得分,这个得分基于my_vector字段和提供的查询向量[4, 3.5, 4]之间的余弦相似度。