写入数据文本向量化 #
Easysearch 使用摄取管道 ingest pipeline
中的一系列处理器,可以对写入的数据进行处理,并且支持对文本进行向量化,本文档介绍如何在 Easysearch 中使用 text_embedding
处理器对写入数据进行向量化。
先决条件 #
支持与 OpenAI API 兼容的 embedding 接口,支持 Ollama embedding 接口。
需要安装 Easysearch 的 knn
和 ai
插件。
在生产环境中使用数据采集时,您的集群应至少包含一个节点,且该节点的节点角色权限设置为 ingest
。
创建带有向量字段的索引 #
首先,需要创建一个包含 knn mapping 的索引,text_vector 是存储向量的字段,向量维度是 768。
PUT /my-index
{
"mappings": {
"properties": {
"text_vector": {
"type": "knn_dense_float_vector",
"knn": {
"dims": 768,
"model": "lsh",
"similarity": "cosine",
"L": 99,
"k": 1
}
}
}
}
}
创建或更新 text_embedding
处理器
#
请求路径:
PUT _ingest/pipeline/<pipeline-id>
请求示例:
PUT _ingest/pipeline/text-embedding-pipeline
{
"description": "用于生成文本嵌入向量的管道",
"processors": [
{
"text_embedding": {
"url": "https://api.openai.com/v1/embeddings",
"vendor": "openai",
"api_key": "<api_key>",
"text_field": "input_text",
"vector_field": "text_vector",
"model_id": "text-embedding-3-small",
"dims": 768,
"ignore_missing": false,
"ignore_failure": false
}
}
]
}
请求体字段: #
下表列出了用于创建或更新管道的请求体字段。
参数 | 是否必填 | 类型 | 说明 |
---|---|---|---|
processors | 必填 | 数组 | 处理器列表,按顺序执行。示例中仅包含 text_embedding 处理器。 |
description | 可选 | 字符串 | 管道的描述信息,用于说明用途(如“生成文本嵌入向量”)。 |
url | 必填 | 字符串 | Embedding API 的完整 URL(如 https://api.openai.com/v1/embeddings )。 |
vendor | 必填 | 字符串 | 服务提供商标识,固定为 "openai" 或 "ollama" 。 |
api_key | 必填 | 字符串 | API 密钥,需替换为实际值(如 "sk-xxx" )。 |
text_field | 必填 | 字符串 | 输入文本的字段名(如 "input_text" ),需与索引中的字段匹配。 |
vector_field | 必填 | 字符串 | 存储向量的目标字段名(如 "text_vector" ),必须包含在索引的 knn mapping 里。 |
model_id | 必填 | 字符串 | 模型名称(如 "text-embedding-3-small" 或 "text-embedding-v3" )。 |
dims | 必填 | 整数 | 向量维度(需与所选模型匹配,如 768 对应 text-embedding-3-small ),并与 mapping 里的 dims 保持一致。 |
ignore_missing | 可选 | 布尔值 | 若 text_field 不存在是否跳过处理(默认 false )。 |
ignore_failure | 可选 | 布尔值 | 若处理失败是否继续执行后续处理器(默认 false )。 |
若使用国内大模型,例如阿里云的千问,需替换为
url: https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings
model_id: text-embedding-v3
dims: 根据模型确定
路径参数: #
参数 | 是否必填 | 类型 | 说明 |
---|---|---|---|
pipeline-id | 必填 | 字符串 | 分配给管道的唯一标识符,即管道 ID。 |
若已部署 Ollama 服务,按下面示例使用:
PUT _ingest/pipeline/ollama-embedding-pipeline
{
"description": "Ollama embedding 示例",
"processors": [
{
"text_embedding": {
"url": "http://localhost:11434/api/embed",
"vendor": "ollama",
"text_field": "input_text",
"vector_field": "text_vector",
"model_id": "nomic-embed-text:latest",
"ignore_missing": false,
"ignore_failure": false
}
}
]
}
查看 text_embedding
处理器
#
查看 text_embedding
处理器与查看其他处理器的 api 一致:
GET _ingest/pipeline
返回输出:
{
"ollama-embedding-pipeline": {
"description": "Ollama embedding 示例",
"processors": [
{
"text_embedding": {
"ignore_failure": false,
"vendor": "ollama",
"vector_field": "text_vector",
"text_field": "input_text",
"ignore_missing": false,
"model_id": "nomic-embed-text:latest",
"url": "http://localhost:11434/api/embed"
}
}
]
},
"text-embedding-pipeline": {
"description": "用于生成文本嵌入向量的管道",
"processors": [
{
"text_embedding": {
"ignore_failure": false,
"dims": 768,
"api_key": "*************************************************vE",
"vendor": "openai",
"vector_field": "text_vector",
"text_field": "input_text",
"ignore_missing": false,
"model_id": "text-embedding-3-small",
"url": "https://poloai.top/v1/embeddings"
}
}
]
}
}
api_key
会被遮掩,防止泄露
使用 text_embedding
处理器进行写入时转换
#
与使用其他处理器一致,
POST /_bulk?pipeline=text-embedding-pipeline&pretty&refresh=wait_for
{ "index": { "_index": "my-index" } }
{ "input_text": "第一个批量处理的文本。", "source": "bulk api example 1" }
{ "index": { "_index": "my-index", "_id": "bulk_doc_2" } }
{ "input_text": "第二个批量处理的文本,指定了ID。", "priority": 1 }
{ "index": { "_index": "my-index" } }
{ "input_text": "这是另一示例文本。", "tags": ["bulk", "test"] }
查看写入结果
GET my-index/_search
返回输出:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "my-index",
"_type": "_doc",
"_id": "dd2DAZgB6WXmvHRNYksX",
"_score": 1,
"_source": {
"input_text": "第一个批量处理的文本。",
"text_vector": [
0.012978158,
0.007739224,
-0.015867598,
0.005287578,
......
删除 text_embedding
处理器
#
与删除其他处理器一致
DELETE _ingest/pipeline/text-embedding-pipeline