神经网络查询
在向量搜索中,使用 neural
查询通过文本或图像进行向量字段搜索。
请求正文字段
在 neural
查询中包含以下请求字段
"neural": {
"<vector_field>": {
"query_text": "<query_text>",
"query_image": "<image_binary>",
"model_id": "<model_id>",
"k": 100
}
}
顶层 vector_field
指定了用于运行搜索查询的向量或语义字段。下表列出了其他神经网络查询字段。
字段 | 数据类型 | 必需/可选 | 描述 |
---|---|---|---|
query_text | 字符串 | 可选 | 用于生成向量嵌入的查询文本。您必须至少指定一个 query_text 或 query_image 。 |
query_image | 字符串 | 可选 | 一个 base-64 编码字符串,对应于用于生成向量嵌入的查询图像。您必须至少指定一个 query_text 或 query_image 。 |
model_id | 字符串 | 如果目标字段是语义字段,则为可选。如果目标字段是 knn_vector 字段且未设置默认模型 ID,则为必需。欲了解更多信息,请参阅在索引或字段上设置默认模型。 | 将用于从查询文本生成向量嵌入的模型 ID。模型必须先部署在 OpenSearch 中才能用于神经网络搜索。欲了解更多信息,请参阅在 OpenSearch 中使用自定义模型和神经网络搜索。不能与 semantic_field_search_analyzer 一起提供。 |
k | 整数 | 可选 | k-NN 搜索返回的结果数量。只能指定一个变量,即 k 、min_score 或 max_distance 。如果未指定变量,则默认为 k ,值为 10 。 |
min_score | 浮点型 | 可选 | 搜索结果的最小分数阈值。只能指定一个变量,即 k 、min_score 或 max_distance 。欲了解更多信息,请参阅径向搜索。 |
max_distance | 浮点型 | 可选 | 搜索结果的最大距离阈值。只能指定一个变量,即 k 、min_score 或 max_distance 。欲了解更多信息,请参阅径向搜索。 |
filter | 对象 | 可选 | 可用于减少考虑的文档数量的查询。欲了解有关过滤器用法的更多信息,请参阅带过滤器的向量搜索。 |
method_parameters | 对象 | 可选 | 用于微调搜索的附加参数 - ef_search (整数): 要检查的向量数量(对于 hnsw 方法)- nprobes (整数): 要检查的桶数量(对于 ivf 方法)。欲了解更多信息,请参阅在查询中指定方法参数。 |
rescore | 对象或布尔值 | 可选 | 配置重新评分功能的参数 - oversample_factor (浮点数): 控制在重新评分前检索的候选向量数量。有效值在 [1.0, 100.0] 范围内。对于 in_memory 模式的字段(不重新评分),默认为 false ;对于 on_disk 模式的字段,默认为 enabled (具有动态值)。在 on_disk 模式下,默认的 oversample_factor 由 compression_level 决定。欲了解更多信息,请参阅压缩级别表。要显式启用默认 oversample_factor 为 1.0 的重新评分,请将 rescore 设置为 true 。欲了解更多信息,请参阅重新评分结果。 |
expand_nested_docs | 布尔型 | 可选 | 当为 true 时,检索每个父文档中所有嵌套字段文档的分数。与嵌套查询一起使用。欲了解更多信息,请参阅带嵌套字段的向量搜索。 |
semantic_field_search_analyzer | 字符串 | 可选 | 指定在使用稀疏编码模型时用于对 query_text 进行分词的分析器。有效值为 standard 、bert-uncased 和 mbert-uncased 。不能与 model_id 一起使用。欲了解更多信息,请参阅分析器。 |
query_tokens | 词元(字符串)到权重(浮点数)的映射 | 可选 | 以词元及其权重形式表示的原始稀疏向量。用作 query_text 的替代方案,用于直接向量输入。必须指定 query_text 或 query_tokens 中的一个。 |
请求示例
以下示例展示了 k
值为 100
的搜索,以及包含范围查询和术语查询的过滤器
GET /my-nlp-index/_search
{
"query": {
"neural": {
"passage_embedding": {
"query_text": "Hi world",
"query_image": "iVBORw0KGgoAAAAN...",
"k": 100,
"filter": {
"bool": {
"must": [
{
"range": {
"rating": {
"gte": 8,
"lte": 10
}
}
},
{
"term": {
"parking": "true"
}
}
]
}
}
}
}
}
}
以下搜索查询包含 k-NN 径向搜索 min_score
为 0.95
,以及包含范围查询和术语查询的过滤器
GET /my-nlp-index/_search
{
"query": {
"neural": {
"passage_embedding": {
"query_text": "Hi world",
"query_image": "iVBORw0KGgoAAAAN...",
"min_score": 0.95,
"filter": {
"bool": {
"must": [
{
"range": {
"rating": {
"gte": 8,
"lte": 10
}
}
},
{
"term": {
"parking": "true"
}
}
]
}
}
}
}
}
}
以下搜索查询包含 k-NN 径向搜索 max_distance
为 10
,以及包含范围查询和术语查询的过滤器
GET /my-nlp-index/_search
{
"query": {
"neural": {
"passage_embedding": {
"query_text": "Hi world",
"query_image": "iVBORw0KGgoAAAAN...",
"max_distance": 10,
"filter": {
"bool": {
"must": [
{
"range": {
"rating": {
"gte": 8,
"lte": 10
}
}
},
{
"term": {
"parking": "true"
}
}
]
}
}
}
}
}
}
以下示例展示了使用密集模型对 semantic
字段进行的搜索。semantic
字段在其配置中存储模型信息。neural
查询会自动从索引映射中的 semantic
字段配置中检索 model_id
,并重写查询以定位相应的嵌入字段
GET /my-nlp-index/_search
{
"query": {
"neural": {
"passage": {
"query_text": "Hi world"
"k": 100
}
}
}
}
以下示例展示了使用稀疏编码模型对 semantic
字段进行的搜索。此搜索使用稀疏嵌入
GET /my-nlp-index/_search
{
"query": {
"neural": {
"passage": {
"query_tokens": {
"worlds": 0.57605183
}
}
}
}
}
欲了解更多信息,请参阅语义字段类型。