阿里云8.13版本Elasticsearch(简称ES)提供了Inference API,可使用外部各个公司提供的推理模型服务,同时阿里云ES扩展了Inference API的服务,使之可以使用阿里云的推理模型服务(搜索开发工作台)。本文介绍Inference API扩展的搜索开发工作台支持的推理模型服务API。
背景信息
搜索开发工作台围绕智能搜索及RAG场景,提供优质的组件化服务以及灵活的调用机制,内置文档解析、文档切片、文本向量、召回、排序和大模型等服务,可实现一站式灵活的AI搜索业务开发。
关于搜索开发工作台的更多信息,请参见搜索开发工作台介绍。
关于Inference API的更多信息,请参见Inference API。
文档参数说明表中的└
符号表示子参数。
Inference接口
TEXT_EMBEDDING(文本向量化)
创建和调试文本向量化的推理模型TEXT_EMBEDDING。Inference API集成的文本向量化模型介绍,请参见文本向量API。
创建text_embedding
PUT _inference/text_embedding/<inference_id>
{
"service": "alibabacloud-ai-search",
"service_settings": {
"api_key": "<API-KEY>",
"service_id": "<service_id>",
"host": "<host>",
"workspace": "<workspace_name>",
"http_schema":"<http_schema>"
},
"task_settings": {
"input_type": "<input_type>"
}
}
参数说明:
参数 | 说明 |
<inference_id> | 自定义的inference endpoint标识符。 |
service | 指定使用的服务,以上示例指定使用的服务为 |
service_settings | 服务设置,必填。 |
└api_key | 鉴权使用的API-KEY。获取方式,请参见管理API-KEY。 |
└service_id | 使用的模型服务名称,支持的值:
模型服务名称介绍,请参见文本向量API。 |
└host | 调用服务的地址,支持通过公网、内网两种方式调用API服务。 获取服务地址,请参见API-KEY管理页面的API域名。例如 说明 调用服务的地址host无需添加 |
workspace | 工作空间名称,例如 |
http_schema | http类型(可选),默认值是https,可选参数包括https和http。 |
task_settings | 任务设置,可选。 |
└input_type | input的数据类型,支持的值:
|
调用示例:
PUT _inference/text_embedding/os-embeddings
{
"service": "alibabacloud-ai-search",
"service_settings": {
"api_key": "OS-xxx",
"service_id": "ops-text-embedding-001",
"host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
"workspace" : "default"
}
}
调试text_embedding
POST _inference/text_embedding/<inference_id>
{
"input":[<input>]
}
参数说明:
infenrece_id
:inference endpoint标识符。input
:输入内容。每次请求最多支持32条文本输入,每一条文本的长度大小取决于选择的模型。不支持空的字符串。
调用示例:
# query
POST _inference/text_embedding/os-embeddings
{
"input":["科学技术是第一生产力",
"elasticsearch产品文档"]
}
# response
{
"text_embedding": [
{
"embedding": [
-0.029408421,
0.061318535,
...
]
},
{
"embedding": [
0.01568979,
0.065073475,
...
]
}
]
}
SPARSE_EMBEDDING(文本稀疏向量化)
创建和调试文本稀疏向量化的推理模型SPARSE_EMBEDDING。Inference API集成的文本稀疏向量化模型介绍,请参见文本稀疏向量化API。
创建sparse_embedding
PUT _inference/sparse_embedding/<inference_id>
{
"service": "alibabacloud-ai-search",
"service_settings": {
"api_key": "<API-KEY>",
"service_id": "<service_id>",
"host": "<host>",
"workspace": "<workspace_name>",
"http_schema":"<http_schema>"
},
"task_settings": {
"input_type": "<input_type>"
}
}
参数说明:
参数 | 说明 |
<inference_id> | 自定义的inference endpoint标识符。 |
service | 指定使用的服务,以上示例指定使用的服务为 |
service_settings | 服务设置,必填。 |
└api_key | 鉴权使用的API-KEY。获取方式,请参见管理API-KEY。 |
└service_id | 使用的模型服务名称,支持的值: 模型服务名称介绍,请参见文本稀疏向量化API。 |
└host | 调用服务的地址,支持通过公网、内网两种方式调用API服务。 获取服务地址,请参见API-KEY管理页面的API域名。例如 |
workspace | 工作空间名称,例如 |
http_schema | http类型(可选),默认值是https,可选参数包括https和http。 |
task_settings | 任务设置,可选。 |
└input_type | input的数据类型,支持的值:
|
return_token | 返回Token:
|
调用示例:
PUT _inference/sparse_embedding/os-sparse-embeddings
{
"service": "alibabacloud-ai-search",
"service_settings": {
"api_key": "OS-xxx",
"service_id": "ops-text-sparse-embedding-001",
"host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
"workspace" : "default"
}
}
调试sparse_embedding
POST _inference/sparse_embedding/<inference_id>
{
"input":[<input>]
}
参数说明:
infenrece_id
:需要使用的inference endpoint标识符。input
:输入内容。每次请求最多支持32条文本输入,每一条文本的长度大小取决于选择的模型。不支持空的字符串。
调用示例:
# query
POST _inference/sparse_embedding/os-sparse-embeddings
{"input":["科学技术是第一生产力","elasticsearch产品文档"]}
# response
{
"sparse_embedding" : [
{
"is_truncated" : false,
"embedding" : {
"6" : 0.10144043,
"163040" : 0.2841797,
"354" : 0.14318848,
"5998" : 0.16149902,
"8550" : 0.23901367,
"2017" : 0.16137695
}
},
{
"is_truncated" : false,
"embedding" : {
"6" : 0.0035858154,
"128766" : 0.24768066,
"86250" : 0.2680664,
"5889" : 0.19616699,
"2564" : 0.12634277,
"59529" : 0.19226074
}
}
]
}
RERANK(排序服务)
创建和调试重排序的推理模型RERANK。Inference API集成的重排序模型介绍,请参见排序服务API。
创建rerank推理服务
PUT _inference/rerank/<inference_id>
{
"service": "alibabacloud-ai-search",
"service_settings": {
"host": "<host>",
"api_key": "<API-KEY>",
"service_id": "<service_id>",
"workspace": "<workspace_name>",
"http_schema":"<http_schema>"
}
}
参数说明:
参数 | 说明 |
<inference_id> | 自定义的inference endpoint标识符。 |
service | 指定使用的服务,以上示例指定使用的服务为 |
service_settings | 服务设置,必填。 |
└api_key | 鉴权使用的API-KEY。获取方式,请参见管理API-KEY。 |
└service_id | 使用的模型服务名称,支持的值:ops-bge-reranker-larger。 模型服务名称介绍,请参见排序服务API。 |
└host | 调用服务的地址,支持通过公网、内网两种方式调用API服务。 获取服务地址,请参见API-KEY管理页面的API域名。例如 |
workspace | 工作空间名称,例如 |
http_schema | http类型(可选),默认值是https,可选参数包括https和http。 |
调用示例:
PUT _inference/rerank/os-rerank
{
"service": "alibabacloud-ai-search",
"service_settings": {
"api_key": "OS-xxx",
"service_id": "ops-bge-reranker-larger",
"host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
"workspace" : "default"
}
}
调试rerank推理模型
POST _inference/rerank/<inference_id>
{
"input": [<input_list>],
"query": "<query>"
}
参数说明:
infenrece_id
:需要使用的inference endpoint标识符。
input
:列表形式的文档内容。
query
:查询内容。
调用示例:
# query
POST _inference/rerank/os-rerank
{
"input": ["luke", "like", "leia", "chewy","r2d2", "star", "wars"],
"query": "star wars main character"
}
# response
{
"rerank": [
{
"index": 5,
"score": 0.34587815
},
{
"index": 6,
"score": 0.10338597
},
{
"index": 2,
"score": 0.071332
},
{
"index": 0,
"score": 0.04681203
},
{
"index": 4,
"score": 0.015189049
},
{
"index": 1,
"score": 0.0013406205
},
{
"index": 3,
"score": 0.00109019
}
]
}
SPLIT_DOC(文档切片)
文档切片推理模型SPLIT_DOC可将复杂的文档内容按照指定token数量进行切分成一个chunk列表。Inference API集成的文档切片推理模型介绍,请参见搜索开发工作台_文档切片API。
创建splic_doc推理模型
PUT _inference/doc_split/<inference_id>
{
"service": "alibabacloud-ai-search",
"service_settings": {
"host" : "<host>",
"api_key":"<api_key>",
"service_id": "<service_id>",
"workspace" : "<work_space>",
"http_schema":"<http_schema>"
},
"task_settings": {
"document":{
"content_encoding":"<document.content_encoding>",
"content_type":"<document.content_type>"
},
"strategy":{
"type":"<strategy.type>",
"max_chunk_size":<strategy.max_chunk_size>,
"compute_type":"<strategy.compute_type>",
"need_sentence":"<strategy.need_sentence>"
}
}
}
参数 | 说明 |
<inference_id> | 自定义的inference endpoint标识符。 |
service | 指定使用的服务,以上示例指定使用的服务为 |
service_settings | 服务设置,必填。 |
└api_key | 鉴权使用的API-KEY。获取方式,请参见管理API-KEY。 |
└service_id | 使用的模型服务名称,支持的值:ops-document-split-001。 模型服务名称介绍,请参见文档切片API。 |
└host | 调用服务的地址,支持通过公网、内网两种方式调用API服务。 获取服务地址,请参见API-KEY管理页面的API域名。例如 |
workspace | 工作空间名称,例如 |
http_schema | http类型(可选),默认值是https,可选参数包括https和http。 |
task_settings | 任务设置,可选。 |
└document | 文档配置。 |
└└content_encoding | content编码类型,目前仅支持utf8。 |
└└content_type | content格式,支持的值:
|
└strategy | 切片策略。 |
└└type | 段落切片策略,目前仅支持 |
└└max_chunk_size | 切片的最大长度,默认300。 |
└└compute_type | 长度计算方式,目前仅支持 |
└└need_sentence | 是否同时返回sentence级别切片,用于优化短query查询。
|
调用示例:
PUT _inference/doc_split/os-doc-split
{
"service": "alibabacloud-ai-search",
"service_settings": {
"api_key": "OS-xxx",
"service_id": "ops-document-split-001",
"host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
"workspace" : "default"
}
}
调试doc_split推理模型
POST _inference/doc_split/<inference_id>
{
"input":"<input>"
}
参数说明:
infenrece_id
:需要使用的inference endpoint标识符。input
:需要切片的纯文本内容。根据JSON标准,string字段如果包含字符\\
、\"
、\/
、\b
、\f
、\n
、\r
或\t
,需要转义,常用json库生成的json串无需手动转义。
调用示例:
# query
POST _inference/doc_split/os-doc-split
{
"input":"Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用。只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
}
# response
{
"doc_split": {
"rich_texts": [],
"nodes": [
{
"parent_id": "af0d0ddc07844835883c76c046cb97fd",
"id": "af0d0ddc07844835883c76c046cb97fd",
"type": "root"
},
{
"parent_id": "af0d0ddc07844835883c76c046cb97fd",
"id": "d77e2ff8d7724ae797f991580299b680",
"type": "sentence_node"
},
{
"parent_id": "af0d0ddc07844835883c76c046cb97fd",
"id": "aef1bc5fe2354f7a8b76ce07249a1836",
"type": "sentence_node"
}
],
"chunks": [
{
"meta": {
"parent_id": "af0d0ddc07844835883c76c046cb97fd",
"id": "d77e2ff8d7724ae797f991580299b680",
"type": "text",
"token": 298
},
"content": "Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用"
},
{
"meta": {
"parent_id": "af0d0ddc07844835883c76c046cb97fd",
"id": "aef1bc5fe2354f7a8b76ce07249a1836",
"type": "text",
"token": 160
},
"content": "只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
}
]
}
}
GET Inference API
详细信息,请参见Get inference API。
GET /_inference/_all
GET /_inference/<inference_id>
GET /_inference/<task_type>/_all
GET /_inference/<task_type>/<inference_id>
参数说明:
<inference_id>
:自定义的inference endpoint标识符。<task_type>
:inference接口类型,支持的值:text_embedding
sparse_embedding
rerank
调用示例:
# query
GET _inference/_all
# response
{
"models": [
{
"model_id": "os-embeddings",
"task_type": "text_embedding",
"service": "alicloud-ai-search",
"service_settings": {
"similarity": "dot_product",
"dimensions": 1536,
"service_id": "ops-text-embedding-001",
"host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
"workspace": "default"
},
"task_settings": {}
},
{
"model_id": "os-rerank",
"task_type": "rerank",
"service": "alicloud-ai-search",
"service_settings": {
"service_id": "ops-bge-reranker-larger",
"host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
"workspace": "default"
},
"task_settings": {}
},
{
"model_id": "os-sparse-embeddings",
"task_type": "sparse_embedding",
"service": "alicloud-ai-search",
"service_settings": {
"service_id": "ops-text-sparse-embedding-001",
"host": "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
"workspace": "default"
},
"task_settings": {}
}
]
}
DELETE Inference API
详细信息,请参见DELETE Inference API。
DELETE /_inference/<inference_id>
DELETE /_inference/<task_type>/<inference_id>
参数说明:
<inference_id>
:自定义的inference endpoint标识符。<task_type>
:inference接口类型,支持的值:text_embedding
sparse_embedding
rerank
调用示例:
# query
DELETE _inference/os-rerank
# response
{
"acknowledged": true
}
Ingest Processor扩展
基于阿里云搜索开发平台的Inference扩展,阿里云ES实现了以下几个自定义的ingest processor,可以通过更方便的配置,将数据导入ES。
split doc processor
split doc processor使用doc_split模型,将一个富文本切成多个chunk。
创建split doc processor
PUT _ingest/pipeline/<pipeline_name>
{
"description": "<description>",
"processors": [
{
"document_splitting": {
"model_id": "<model_id>",
"input_output": [
{
"input_field": "<input_type>",
"output_field": "<input_field>",
"extend_output_field": "<extend_output_field>"
}
]
}
}
]
}
参数说明:
参数 | 说明 |
pipeline_name | 自定义pipeline的名称。 |
description | pipeline的说明。 |
model_id | 定义的文档切片服务对应的model_id。 |
input_field | 输入的字段名。 |
output_field | 输出结果的字段名。 |
extend_output_field | 额外的输出结果的字段名,一些需要二次处理的结果会在这个字段中。 |
调用示例:
PUT _ingest/pipeline/os-split-doc-pipeline
{
"description": "This is an example of split doc pipeline",
"processors": [
{
"document_splitting": {
"model_id": "os-doc-split",
"input_output": [
{
"input_field": "content",
"output_field": "chunk",
"extend_output_field": "chunk_ext"
}
]
}
}
]
}
使用_simulate测试pipeline功能
POST _ingest/pipeline/os-split-doc-pipeline/_simulate
{
"docs": [
{
"_index": "testindex",
"_id": "1",
"_source":{
"content": "Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用。只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
}
}
]
}
返回的Response如下:
{
"docs": [
{
"doc": {
"_index": "testindex",
"_version": "-3",
"_id": "1",
"_source": {
"chunk_ext": [],
"chunk": [
{
"meta": {
"id": "0284a0f5644540c8b3c6ddefd897353f",
"type": "text",
"parent_id": "d88a5098fd5d446da7f81f9074b47591",
"token": 298
},
"content": "Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用"
},
{
"meta": {
"id": "f6d8063c562240cabeb52365999eeea3",
"type": "text",
"parent_id": "d88a5098fd5d446da7f81f9074b47591",
"token": 160
},
"content": "只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
}
],
"content": "Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:一个分布式的实时文档存储,每个字段可以被索引与搜索.一个分布式实时分析搜索引擎.能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据.Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用。只需最少的理解,你很快就能具有生产力。随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。你可以免费下载,使用,修改 Elasticsearch。它在 Apache 2 license 协议下发布的, 这是众多灵活的开源协议之一。Elasticsearch 的源码被托管在 Github 上 github.com/elastic/elasticsearch。 如果你想加入我们这个令人惊奇的 contributors 社区,看这里 Contributing to Elasticsearch。如果你对 Elasticsearch 有任何相关的问题,包括特定的特性(specific features)、语言客户端(language clients)、插件(plugins),可以在这里 discuss.elastic.co 加入讨论。"
},
"_ingest": {
"timestamp": "2024-07-16T06:34:56.003299351Z"
}
}
}
]
}
text embedding processor
text embedding processor简化了写入的embedding处理,text_embedding和sparse_embedding类型均可以使用该processor。
text embedding processor支持nested类型的文档直接进行embedding,不过受限于模型一次处理的embedding chunk数量,一般一个nested文档不能超过32个子文档。如果超过32个子文档,需要使用foreach processor处理。
关于foreach processor的更多信息,请参见foreach-processor。
创建text embedding processor
PUT _ingest/pipeline/<pipeline_name>
{
"description": "<description>",
"processors": [
{
"text_embedding": {
"model_id": "<model_id>",
"input_output": [
{
"input_type" : "<input_type>",
"input_field": "<input_field>",
"output_field": "<output_field>"
}
]
}
}
]
}
参数说明:
参数 | 说明 |
pipeline_name | 自定义pipeline的名称。 |
description | pipeline的说明。 |
model_id | 定义的文档切片服务对应的model_id。 |
input_type | 输入字段的类型。可选值包括:
|
input_field | 输入的字段名。 |
output_field | 输出结果的字段名。 |
调用示例:
PUT _ingest/pipeline/os-embedding-pipeline
{
"description": "This is an example of embedding fields",
"processors": [
{
"text_embedding": {
"model_id": "os-embeddings",
"input_output": [
{
"input_field": "content",
"output_field": "content_embedding"
}
]
}
}
]
}
使用_simulate测试pipeline的功能
POST _ingest/pipeline/os-embedding-pipeline/_simulate
{
"docs": [
{
"_index": "testindex",
"_id": "1",
"_source":{
"content": "elasticsearch产品文档"
}
}
]
}
正确的返回结果:
{
"docs": [
{
"doc": {
"_index": "testindex",
"_version": "-3",
"_id": "1",
"_source": {
"content_embedding": [
0.01568979024887085,
0.06507347524166107,
...
],
"model_id": "os-embeddings",
"content": "elasticsearch产品文档"
},
"_ingest": {
"timestamp": "2024-07-16T06:36:06.803526132Z"
}
}
}
]
}