|
@@ -0,0 +1,740 @@
|
|
|
|
|
+# 搜索 API 文档
|
|
|
|
|
+
|
|
|
|
|
+本文档包含三个搜索相关的 API 接口:
|
|
|
|
|
+
|
|
|
|
|
+1. **关键词搜索** - 根据关键词搜索分类和元素
|
|
|
|
|
+2. **获取分类树** - 获取指定分类的完整路径和子树
|
|
|
|
|
+3. **获取全量元素** - 分页浏览元素,支持排序和筛选
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 接口 1:关键词搜索
|
|
|
|
|
+
|
|
|
|
|
+### 接口地址
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+GET http://8.147.104.190:8001/api/search
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 功能说明
|
|
|
|
|
+
|
|
|
|
|
+搜索全局分类库中的分类(Category)和元素(Element),支持文本匹配、上下文扩展、平台筛选等功能。
|
|
|
|
|
+
|
|
|
|
|
+## 请求参数
|
|
|
|
|
+
|
|
|
|
|
+| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|
|
|
|
+|--------|------|------|--------|------|
|
|
|
|
|
+| q | string | ✓ | - | 搜索关键词 |
|
|
|
|
|
+| source_type | string | ✓ | - | 元素类型:`实质` / `形式` / `意图` |
|
|
|
|
|
+| entity_type | string | ✗ | all | 搜索对象类型:`category`(分类)/ `element`(元素)/ `all`(全部) |
|
|
|
|
|
+| top_k | integer | ✗ | 20 | 返回结果数量,范围 1-100 |
|
|
|
|
|
+| use_description | boolean | ✗ | false | 是否在描述字段中搜索(true=搜索名称+描述,false=仅搜索名称) |
|
|
|
|
|
+| mode | string | ✗ | text | 搜索模式:`text`(文本匹配)/ `vector`(向量搜索)/ `hybrid`(混合),当前仅支持 text |
|
|
|
|
|
+| include_ancestors | boolean | ✗ | false | 是否返回祖先路径(从根节点到父节点的完整路径) |
|
|
|
|
|
+| descendant_depth | integer | ✗ | 0 | 返回 N 代以内的子孙节点,0=不返回,1=直接子节点,2=子节点+孙节点... |
|
|
|
|
|
+| platform | string | ✗ | null | 按平台筛选,仅对元素有效(如:`小红书`、`抖音`、`微博` 等) |
|
|
|
|
|
+
|
|
|
|
|
+## 返回格式
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "success": true,
|
|
|
|
|
+ "query": "搜索关键词",
|
|
|
|
|
+ "source_type": "实质",
|
|
|
|
|
+ "entity_type": "all",
|
|
|
|
|
+ "count": 3,
|
|
|
|
|
+ "results": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "entity_type": "category",
|
|
|
|
|
+ "entity_id": 123,
|
|
|
|
|
+ "stable_id": 456,
|
|
|
|
|
+ "name": "分类名称",
|
|
|
|
|
+ "description": "分类描述",
|
|
|
|
|
+ "path": "/一级分类/二级分类",
|
|
|
|
|
+ "category_nature": "领域层级",
|
|
|
|
|
+ "level": 2,
|
|
|
|
|
+ "score": 0.95,
|
|
|
|
|
+ "scores": {
|
|
|
|
|
+ "text": 0.95,
|
|
|
|
|
+ "vector": 0.0
|
|
|
|
|
+ },
|
|
|
|
|
+ "ancestors": [...],
|
|
|
|
|
+ "descendants": [...]
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "entity_type": "element",
|
|
|
|
|
+ "entity_id": 789,
|
|
|
|
|
+ "name": "元素名称",
|
|
|
|
|
+ "description": "元素描述",
|
|
|
|
|
+ "belong_category_stable_id": 456,
|
|
|
|
|
+ "occurrence_count": 25,
|
|
|
|
|
+ "score": 0.88,
|
|
|
|
|
+ "scores": {
|
|
|
|
|
+ "text": 0.88,
|
|
|
|
|
+ "vector": 0.0
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 返回字段说明
|
|
|
|
|
+
|
|
|
|
|
+#### 通用字段
|
|
|
|
|
+- `success`: 请求是否成功
|
|
|
|
|
+- `query`: 搜索关键词
|
|
|
|
|
+- `source_type`: 元素类型
|
|
|
|
|
+- `entity_type`: 搜索对象类型
|
|
|
|
|
+- `count`: 返回结果数量
|
|
|
|
|
+- `results`: 结果列表
|
|
|
|
|
+
|
|
|
|
|
+#### 结果对象字段(分类 Category)
|
|
|
|
|
+- `entity_type`: 固定为 "category"
|
|
|
|
|
+- `entity_id`: 分类数据库 ID
|
|
|
|
|
+- `stable_id`: 分类稳定 ID(用于跨版本引用)
|
|
|
|
|
+- `name`: 分类名称
|
|
|
|
|
+- `description`: 分类描述
|
|
|
|
|
+- `path`: 分类路径(如 `/主体/角色类型/人物角色`)
|
|
|
|
|
+- `category_nature`: 分类性质(领域层级/元描述层级)
|
|
|
|
|
+- `level`: 层级深度(1=根节点)
|
|
|
|
|
+- `score`: 综合相似度分数(0-1)
|
|
|
|
|
+- `scores`: 各维度分数
|
|
|
|
|
+- `ancestors`: 祖先路径(当 `include_ancestors=true` 时返回)
|
|
|
|
|
+- `descendants`: 子孙节点(当 `descendant_depth>0` 时返回)
|
|
|
|
|
+
|
|
|
|
|
+#### 结果对象字段(元素 Element)
|
|
|
|
|
+- `entity_type`: 固定为 "element"
|
|
|
|
|
+- `entity_id`: 元素数据库 ID
|
|
|
|
|
+- `name`: 元素名称
|
|
|
|
|
+- `description`: 元素描述
|
|
|
|
|
+- `belong_category_stable_id`: 所属分类的 stable_id
|
|
|
|
|
+- `occurrence_count`: 出现次数
|
|
|
|
|
+- `score`: 综合相似度分数(0-1)
|
|
|
|
|
+- `scores`: 各维度分数
|
|
|
|
|
+
|
|
|
|
|
+#### ancestors 字段结构
|
|
|
|
|
+```json
|
|
|
|
|
+[
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 1,
|
|
|
|
|
+ "name": "主体",
|
|
|
|
|
+ "level": 1
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 10,
|
|
|
|
|
+ "name": "角色类型",
|
|
|
|
|
+ "level": 2
|
|
|
|
|
+ }
|
|
|
|
|
+]
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### descendants 字段结构
|
|
|
|
|
+```json
|
|
|
|
|
+[
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 500,
|
|
|
|
|
+ "name": "人物角色",
|
|
|
|
|
+ "level": 3,
|
|
|
|
|
+ "depth_from_parent": 1,
|
|
|
|
|
+ "is_leaf": false
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 501,
|
|
|
|
|
+ "name": "动物角色",
|
|
|
|
|
+ "level": 3,
|
|
|
|
|
+ "depth_from_parent": 1,
|
|
|
|
|
+ "is_leaf": true
|
|
|
|
|
+ }
|
|
|
|
|
+]
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 使用示例
|
|
|
|
|
+
|
|
|
|
|
+### 1. 基础搜索
|
|
|
|
|
+
|
|
|
|
|
+#### 搜索所有(分类+元素)
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=角色" \
|
|
|
|
|
+ --data-urlencode "source_type=实质"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 只搜索分类
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=主体" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "entity_type=category"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 只搜索元素
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=猫咪" \
|
|
|
|
|
+ --data-urlencode "source_type=形式" \
|
|
|
|
|
+ --data-urlencode "entity_type=element"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 限制返回数量
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=角色" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "top_k=5"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 2. 扩展搜索范围
|
|
|
|
|
+
|
|
|
|
|
+#### 搜索名称+描述
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=拟人" \
|
|
|
|
|
+ --data-urlencode "source_type=形式" \
|
|
|
|
|
+ --data-urlencode "use_description=true"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 3. 获取上下文信息
|
|
|
|
|
+
|
|
|
|
|
+#### 返回祖先路径
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=人物角色" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "entity_type=category" \
|
|
|
|
|
+ --data-urlencode "include_ancestors=true"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 返回1代子孙节点
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=主体" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "entity_type=category" \
|
|
|
|
|
+ --data-urlencode "descendant_depth=1"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 返回2代子孙节点
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=主体" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "entity_type=category" \
|
|
|
|
|
+ --data-urlencode "descendant_depth=2"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 同时返回祖先+子孙
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=角色类型" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "entity_type=category" \
|
|
|
|
|
+ --data-urlencode "include_ancestors=true" \
|
|
|
|
|
+ --data-urlencode "descendant_depth=2"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 4. 平台筛选
|
|
|
|
|
+
|
|
|
|
|
+#### 只搜索小红书平台的元素
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=角色" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "entity_type=element" \
|
|
|
|
|
+ --data-urlencode "platform=小红书"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 搜索抖音平台的元素
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=主体" \
|
|
|
|
|
+ --data-urlencode "source_type=形式" \
|
|
|
|
|
+ --data-urlencode "platform=抖音"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 平台筛选+描述搜索
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=拟人" \
|
|
|
|
|
+ --data-urlencode "source_type=形式" \
|
|
|
|
|
+ --data-urlencode "platform=小红书" \
|
|
|
|
|
+ --data-urlencode "use_description=true"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 5. 组合查询
|
|
|
|
|
+
|
|
|
|
|
+#### 全功能组合
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=角色" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "entity_type=all" \
|
|
|
|
|
+ --data-urlencode "top_k=10" \
|
|
|
|
|
+ --data-urlencode "use_description=true" \
|
|
|
|
|
+ --data-urlencode "include_ancestors=true" \
|
|
|
|
|
+ --data-urlencode "descendant_depth=1" \
|
|
|
|
|
+ --data-urlencode "platform=小红书"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 不同 source_type 的搜索
|
|
|
|
|
+```bash
|
|
|
|
|
+# 搜索意图维度
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=情感" \
|
|
|
|
|
+ --data-urlencode "source_type=意图"
|
|
|
|
|
+
|
|
|
|
|
+# 搜索形式维度
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=视觉" \
|
|
|
|
|
+ --data-urlencode "source_type=形式"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 6. 浏览器直接访问
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+http://8.147.104.190:8001/api/search?q=角色&source_type=实质
|
|
|
|
|
+http://8.147.104.190:8001/api/search?q=主体&source_type=实质&entity_type=category&include_ancestors=true&descendant_depth=2
|
|
|
|
|
+http://8.147.104.190:8001/api/search?q=猫咪&source_type=形式&platform=小红书
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 7. FastAPI 交互式文档
|
|
|
|
|
+
|
|
|
|
|
+访问以下地址可以在网页上直接测试 API:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+http://8.147.104.190:8001/docs
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+在文档页面找到 `/api/search` 接口,点击 "Try it out" 按钮,填写参数后点击 "Execute" 即可测试。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 返回示例
|
|
|
|
|
+
|
|
|
|
|
+### 示例 1:基础搜索
|
|
|
|
|
+
|
|
|
|
|
+**请求:**
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=角色" \
|
|
|
|
|
+ --data-urlencode "source_type=实质"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**响应:**
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "success": true,
|
|
|
|
|
+ "query": "角色",
|
|
|
|
|
+ "source_type": "实质",
|
|
|
|
|
+ "entity_type": "all",
|
|
|
|
|
+ "count": 2,
|
|
|
|
|
+ "results": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "entity_type": "category",
|
|
|
|
|
+ "entity_id": 123,
|
|
|
|
|
+ "stable_id": 456,
|
|
|
|
|
+ "name": "角色类型",
|
|
|
|
|
+ "description": "内容主体的角色分类",
|
|
|
|
|
+ "path": "/主体/角色类型",
|
|
|
|
|
+ "category_nature": "领域层级",
|
|
|
|
|
+ "level": 2,
|
|
|
|
|
+ "score": 0.95,
|
|
|
|
|
+ "scores": {
|
|
|
|
|
+ "text": 0.95,
|
|
|
|
|
+ "vector": 0.0
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "entity_type": "element",
|
|
|
|
|
+ "entity_id": 789,
|
|
|
|
|
+ "name": "人物角色",
|
|
|
|
|
+ "description": "真实或虚拟的人物形象",
|
|
|
|
|
+ "belong_category_stable_id": 456,
|
|
|
|
|
+ "occurrence_count": 25,
|
|
|
|
|
+ "score": 0.88,
|
|
|
|
|
+ "scores": {
|
|
|
|
|
+ "text": 0.88,
|
|
|
|
|
+ "vector": 0.0
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 示例 2:带祖先和子孙的搜索
|
|
|
|
|
+
|
|
|
|
|
+**请求:**
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=角色类型" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "entity_type=category" \
|
|
|
|
|
+ --data-urlencode "include_ancestors=true" \
|
|
|
|
|
+ --data-urlencode "descendant_depth=2"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**响应:**
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "success": true,
|
|
|
|
|
+ "query": "角色类型",
|
|
|
|
|
+ "source_type": "实质",
|
|
|
|
|
+ "entity_type": "category",
|
|
|
|
|
+ "count": 1,
|
|
|
|
|
+ "results": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "entity_type": "category",
|
|
|
|
|
+ "entity_id": 123,
|
|
|
|
|
+ "stable_id": 456,
|
|
|
|
|
+ "name": "角色类型",
|
|
|
|
|
+ "description": "内容主体的角色分类",
|
|
|
|
|
+ "path": "/主体/角色类型",
|
|
|
|
|
+ "category_nature": "领域层级",
|
|
|
|
|
+ "level": 2,
|
|
|
|
|
+ "score": 1.0,
|
|
|
|
|
+ "scores": {
|
|
|
|
|
+ "text": 1.0,
|
|
|
|
|
+ "vector": 0.0
|
|
|
|
|
+ },
|
|
|
|
|
+ "ancestors": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 1,
|
|
|
|
|
+ "name": "主体",
|
|
|
|
|
+ "level": 1
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
|
|
+ "descendants": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 500,
|
|
|
|
|
+ "name": "人物角色",
|
|
|
|
|
+ "level": 3,
|
|
|
|
|
+ "depth_from_parent": 1,
|
|
|
|
|
+ "is_leaf": false
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 501,
|
|
|
|
|
+ "name": "动物角色",
|
|
|
|
|
+ "level": 3,
|
|
|
|
|
+ "depth_from_parent": 1,
|
|
|
|
|
+ "is_leaf": false
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 600,
|
|
|
|
|
+ "name": "真人角色",
|
|
|
|
|
+ "level": 4,
|
|
|
|
|
+ "depth_from_parent": 2,
|
|
|
|
|
+ "is_leaf": true
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 601,
|
|
|
|
|
+ "name": "虚拟角色",
|
|
|
|
|
+ "level": 4,
|
|
|
|
|
+ "depth_from_parent": 2,
|
|
|
|
|
+ "is_leaf": true
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 示例 3:平台筛选
|
|
|
|
|
+
|
|
|
|
|
+**请求:**
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search" \
|
|
|
|
|
+ --data-urlencode "q=猫咪" \
|
|
|
|
|
+ --data-urlencode "source_type=形式" \
|
|
|
|
|
+ --data-urlencode "entity_type=element" \
|
|
|
|
|
+ --data-urlencode "platform=小红书"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**响应:**
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "success": true,
|
|
|
|
|
+ "query": "猫咪",
|
|
|
|
|
+ "source_type": "形式",
|
|
|
|
|
+ "entity_type": "element",
|
|
|
|
|
+ "count": 3,
|
|
|
|
|
+ "results": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "entity_type": "element",
|
|
|
|
|
+ "entity_id": 1001,
|
|
|
|
|
+ "name": "猫咪",
|
|
|
|
|
+ "description": "可爱的猫咪形象",
|
|
|
|
|
+ "belong_category_stable_id": 200,
|
|
|
|
|
+ "occurrence_count": 15,
|
|
|
|
|
+ "score": 1.0,
|
|
|
|
|
+ "scores": {
|
|
|
|
|
+ "text": 1.0,
|
|
|
|
|
+ "vector": 0.0
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "entity_type": "element",
|
|
|
|
|
+ "entity_id": 1002,
|
|
|
|
|
+ "name": "猫咪拟人",
|
|
|
|
|
+ "description": "拟人化的猫咪角色",
|
|
|
|
|
+ "belong_category_stable_id": 201,
|
|
|
|
|
+ "occurrence_count": 8,
|
|
|
|
|
+ "score": 0.85,
|
|
|
|
|
+ "scores": {
|
|
|
|
|
+ "text": 0.85,
|
|
|
|
|
+ "vector": 0.0
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 错误处理
|
|
|
|
|
+
|
|
|
|
|
+### 错误响应格式
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "detail": "错误信息描述"
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 常见错误
|
|
|
|
|
+
|
|
|
|
|
+| HTTP 状态码 | 错误原因 | 解决方法 |
|
|
|
|
|
+|------------|---------|---------|
|
|
|
|
|
+| 400 | 缺少必填参数(q 或 source_type) | 检查请求参数 |
|
|
|
|
|
+| 400 | source_type 值不合法 | 使用 `实质`、`形式` 或 `意图` |
|
|
|
|
|
+| 400 | entity_type 值不合法 | 使用 `category`、`element` 或 `all` |
|
|
|
|
|
+| 400 | mode 不支持 | 当前仅支持 `text` 模式 |
|
|
|
|
|
+| 500 | 服务器内部错误 | 联系技术支持 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 注意事项
|
|
|
|
|
+
|
|
|
|
|
+1. **中文参数编码**:使用 curl 时,中文参数需要用 `--data-urlencode` 进行 URL 编码
|
|
|
|
|
+2. **平台筛选限制**:`platform` 参数仅对元素(element)有效,对分类(category)无效
|
|
|
|
|
+3. **性能考虑**:
|
|
|
|
|
+ - `use_description=true` 会增加搜索范围,可能降低精确度
|
|
|
|
|
+ - `descendant_depth` 越大,返回数据越多,响应时间越长
|
|
|
|
|
+ - 建议 `top_k` 不超过 50
|
|
|
|
|
+4. **搜索模式**:当前仅支持 `text` 模式,`vector` 和 `hybrid` 模式将在后续版本中支持
|
|
|
|
|
+5. **平台名称**:`platform` 参数值需要与数据库中的平台名称完全一致(区分大小写)
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 接口 2:获取分类树
|
|
|
|
|
+
|
|
|
|
|
+### 接口地址
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+GET http://8.147.104.190:8001/api/search/category/{stable_id}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 功能说明
|
|
|
|
|
+
|
|
|
|
|
+获取指定分类的完整路径和子树结构,用于导航和展示分类层级关系。
|
|
|
|
|
+
|
|
|
|
|
+### 请求参数
|
|
|
|
|
+
|
|
|
|
|
+| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|
|
|
|
+|--------|------|------|--------|------|
|
|
|
|
|
+| stable_id | integer | ✓ | - | 分类的 stable_id(路径参数) |
|
|
|
|
|
+| source_type | string | ✓ | - | 元素类型:`实质` / `形式` / `意图` |
|
|
|
|
|
+| include_ancestors | boolean | ✗ | true | 是否返回祖先路径(从根节点到当前节点) |
|
|
|
|
|
+| descendant_depth | integer | ✗ | -1 | 返回子孙深度,-1=全部,0=仅当前节点,1=子节点,2=子+孙... |
|
|
|
|
|
+
|
|
|
|
|
+### 返回格式
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "success": true,
|
|
|
|
|
+ "current": {
|
|
|
|
|
+ "stable_id": 125,
|
|
|
|
|
+ "name": "吉祥用语",
|
|
|
|
|
+ "description": "通用的吉祥话语和祝福词句",
|
|
|
|
|
+ "path": "/表象/符号/表达符号/祝福语/吉祥用语",
|
|
|
|
|
+ "level": 5
|
|
|
|
|
+ },
|
|
|
|
|
+ "ancestors": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 38,
|
|
|
|
|
+ "name": "表象",
|
|
|
|
|
+ "path": "/表象",
|
|
|
|
|
+ "level": 1
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 40,
|
|
|
|
|
+ "name": "符号",
|
|
|
|
|
+ "path": "/表象/符号",
|
|
|
|
|
+ "level": 2
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
|
|
+ "descendants": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "stable_id": 126,
|
|
|
|
|
+ "name": "新年祝福",
|
|
|
|
|
+ "description": "新年相关的祝福语",
|
|
|
|
|
+ "path": "/表象/符号/表达符号/祝福语/吉祥用语/新年祝福",
|
|
|
|
|
+ "level": 6,
|
|
|
|
|
+ "children": []
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 使用示例
|
|
|
|
|
+
|
|
|
|
|
+#### 获取分类的完整路径和所有子孙
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/category/125" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "include_ancestors=true" \
|
|
|
|
|
+ --data-urlencode "descendant_depth=-1"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 只获取当前节点和祖先路径
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/category/125" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "include_ancestors=true" \
|
|
|
|
|
+ --data-urlencode "descendant_depth=0"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 获取2代子孙节点
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/category/125" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "descendant_depth=2"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 接口 3:获取全量元素数据
|
|
|
|
|
+
|
|
|
|
|
+### 接口地址
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+GET http://8.147.104.190:8001/api/search/elements
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 功能说明
|
|
|
|
|
+
|
|
|
|
|
+获取全量元素数据,支持分页、排序、筛选。主要用于获取高频元素、按分类浏览元素等场景。
|
|
|
|
|
+
|
|
|
|
|
+### 请求参数
|
|
|
|
|
+
|
|
|
|
|
+| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|
|
|
|
+|--------|------|------|--------|------|
|
|
|
|
|
+| source_type | string | ✓ | - | 元素类型:`实质` / `形式` / `意图` |
|
|
|
|
|
+| page | integer | ✗ | 1 | 页码(从1开始) |
|
|
|
|
|
+| page_size | integer | ✗ | 50 | 每页数量(1-200) |
|
|
|
|
|
+| sort_by | string | ✗ | occurrence_count | 排序字段:`occurrence_count` / `name` / `id` |
|
|
|
|
|
+| order | string | ✗ | desc | 排序方向:`asc` / `desc` |
|
|
|
|
|
+| category_stable_id | integer | ✗ | null | 按分类筛选(可选) |
|
|
|
|
|
+| platform | string | ✗ | null | 按平台筛选(可选) |
|
|
|
|
|
+| min_occurrence | integer | ✗ | null | 最小出现次数(可选) |
|
|
|
|
|
+
|
|
|
|
|
+### 返回格式
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "success": true,
|
|
|
|
|
+ "source_type": "实质",
|
|
|
|
|
+ "page": 1,
|
|
|
|
|
+ "page_size": 50,
|
|
|
|
|
+ "total": 4082,
|
|
|
|
|
+ "total_pages": 82,
|
|
|
|
|
+ "results": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "id": 45,
|
|
|
|
|
+ "name": "祝福语",
|
|
|
|
|
+ "description": "'吉祥如意'、'幸福安康'等文字内容",
|
|
|
|
|
+ "occurrence_count": 974,
|
|
|
|
|
+ "element_sub_type": "具象概念",
|
|
|
|
|
+ "category": {
|
|
|
|
|
+ "stable_id": 125,
|
|
|
|
|
+ "name": "吉祥用语",
|
|
|
|
|
+ "path": "/表象/符号/表达符号/祝福语/吉祥用语"
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 使用示例
|
|
|
|
|
+
|
|
|
|
|
+#### 获取高频元素前50(默认)
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=实质"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 获取高频元素前10
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "page=1" \
|
|
|
|
|
+ --data-urlencode "page_size=10" \
|
|
|
|
|
+ --data-urlencode "sort_by=occurrence_count" \
|
|
|
|
|
+ --data-urlencode "order=desc"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 按名称排序
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=形式" \
|
|
|
|
|
+ --data-urlencode "sort_by=name" \
|
|
|
|
|
+ --data-urlencode "order=asc"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 筛选指定分类下的元素
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "category_stable_id=125"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 筛选出现次数>=10的元素
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "min_occurrence=10"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 按平台筛选元素
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=形式" \
|
|
|
|
|
+ --data-urlencode "platform=小红书"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 组合筛选:指定分类+最小出现次数
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "category_stable_id=125" \
|
|
|
|
|
+ --data-urlencode "min_occurrence=50" \
|
|
|
|
|
+ --data-urlencode "page_size=20"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 分页浏览
|
|
|
|
|
+```bash
|
|
|
|
|
+# 第1页
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "page=1" \
|
|
|
|
|
+ --data-urlencode "page_size=50"
|
|
|
|
|
+
|
|
|
|
|
+# 第2页
|
|
|
|
|
+curl -G "http://8.147.104.190:8001/api/search/elements" \
|
|
|
|
|
+ --data-urlencode "source_type=实质" \
|
|
|
|
|
+ --data-urlencode "page=2" \
|
|
|
|
|
+ --data-urlencode "page_size=50"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|