Link Search Menu Expand Document Documentation Menu

神经网络查询

向量搜索中,使用 neural 查询通过文本或图像进行向量字段搜索。

请求正文字段

neural 查询中包含以下请求字段

"neural": {
  "<vector_field>": {
    "query_text": "<query_text>",
    "query_image": "<image_binary>",
    "model_id": "<model_id>",
    "k": 100
  }
}

顶层 vector_field 指定了用于运行搜索查询的向量或语义字段。下表列出了其他神经网络查询字段。

字段 数据类型 必需/可选 描述
query_text 字符串 可选 用于生成向量嵌入的查询文本。您必须至少指定一个 query_textquery_image
query_image 字符串 可选 一个 base-64 编码字符串,对应于用于生成向量嵌入的查询图像。您必须至少指定一个 query_textquery_image
model_id 字符串 如果目标字段是语义字段,则为可选。如果目标字段是 knn_vector 字段且未设置默认模型 ID,则为必需。欲了解更多信息,请参阅在索引或字段上设置默认模型 将用于从查询文本生成向量嵌入的模型 ID。模型必须先部署在 OpenSearch 中才能用于神经网络搜索。欲了解更多信息,请参阅在 OpenSearch 中使用自定义模型神经网络搜索。不能与 semantic_field_search_analyzer 一起提供。
k 整数 可选 k-NN 搜索返回的结果数量。只能指定一个变量,即 kmin_scoremax_distance。如果未指定变量,则默认为 k,值为 10
min_score 浮点型 可选 搜索结果的最小分数阈值。只能指定一个变量,即 kmin_scoremax_distance。欲了解更多信息,请参阅径向搜索
max_distance 浮点型 可选 搜索结果的最大距离阈值。只能指定一个变量,即 kmin_scoremax_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_factorcompression_level 决定。欲了解更多信息,请参阅压缩级别表。要显式启用默认 oversample_factor1.0 的重新评分,请将 rescore 设置为 true。欲了解更多信息,请参阅重新评分结果
expand_nested_docs 布尔型 可选 当为 true 时,检索每个父文档中所有嵌套字段文档的分数。与嵌套查询一起使用。欲了解更多信息,请参阅带嵌套字段的向量搜索
semantic_field_search_analyzer 字符串 可选 指定在使用稀疏编码模型时用于对 query_text 进行分词的分析器。有效值为 standardbert-uncasedmbert-uncased。不能与 model_id 一起使用。欲了解更多信息,请参阅分析器
query_tokens 词元(字符串)到权重(浮点数)的映射 可选 以词元及其权重形式表示的原始稀疏向量。用作 query_text 的替代方案,用于直接向量输入。必须指定 query_textquery_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_score0.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_distance10,以及包含范围查询和术语查询的过滤器

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
        }
      }
    }
  }
}

欲了解更多信息,请参阅语义字段类型

剩余 350 字符

有问题?

想贡献?