[关闭]
@heavysheep 2021-01-18T18:01:00.000000Z 字数 3393 阅读 480

搜索补全APIv0.5

文档

更新历史

20210113: 更新了match模式并设为默认,处理关联搜索更贴近需求。

TODO

基本说明

架构

sensitive_service: 当前部署36个实例,以total接口作为数据的入口。
kafka_client: 预计部署3个实例,作为队列broker。预计配置1个话题(TOPIC)、20个分区(PARTITION)、1个副本(REPLICA)。
search_completion_work: 预计部署20个实例,作为数据处理worker,经测每个实例每日约能处理不低于300W条数据。
ElasticSearch: 预计部署3个实例,固定在3台服务器,作为分布式存储。
search_completion_server: 预计部署1个实例,作为服务提供相关API响应。
annealing_script: 预计部署1个实例,用于定期退火ES数据score、维护ES数据量不超限等。

定义

phrase: 短语类型,是词语的属性之一,当词语有该属性时,可在补全中被搜索出
topic: 话题类型,是词语的属性之一,当词语有该属性时,可在关联搜索中被索索出
weight: 词语权重,此权重实时变动,不代表词频,是score的组成因素之一,会随补全/关联等业务响应。
score: 文本分数,排序藉由文本分数排序后返回。文本分数是内置参数,不会藉由输入、输出返回,weight是其重要组成部分。

流程

TODO

API

外部测试HOST: http://101.133.233.52:10001[已停用]
内部测试HOST: http://172.16.7.9:8080,http://172.16.7.10:8080,http://172.16.7.11:8080,

[POST] 搜索补全

说明

搜索补全指常规搜索中弹出的下拉补全框,当字符变化时,即应调用此API

默认限制文本长度在[length+1, length*2 +1]中。

请求方式

[POST](json) {search_completion_server}/completion

请求头

参数名称 参数值
Content-Type application/json

请求参数

参数 类型 是否必填 默认值 说明
text String 文本前缀
size Int 10 最大文本数量

返回参数

参数 类型 是否必填 说明
code Int 状态码
data Object 补全文本对象
--key String 补全文本
--value Int 文本权重(weight)
message String 处理信息

请求样例

  1. # 请求数据
  2. {
  3. "text": "北",
  4. "size": 12
  5. }
  6. # 响应数据: 成功
  7. {
  8. "code": 0,
  9. "message": "请求成功",
  10. "data": {
  11. "北京": 1716,
  12. "北京市": 323,
  13. "北方": 154,
  14. "北青网": 110,
  15. "北上": 92,
  16. "北约": 91,
  17. "北斗": 83,
  18. "北向": 61,
  19. "北部": 53,
  20. "北美": 50,
  21. "北王庄": 43,
  22. "北路": 38
  23. }
  24. }

[POST] 关联搜索

说明

关联搜索指搜索后关联的其他搜索话题,当确认搜索时,即应调用此API

搜索[topic]符合输入内容的补全,按照score进行排序。"match"模式按score模式排序时,其返回的weight也会从大到小;"suggest"模式允许部分模糊匹配,涉及模糊的词语虽然weight更高,但是score会更低,响应的weight有可能出现排序更低的情况。
默认限制文本响应长度在[2, 20]中。

按照业务合理性,推荐默认"match"模式。

请求方式

[POST](json) {search_completion_server}/association

请求头

参数名称 参数值
Content-Type application/json

请求参数

参数 类型 是否必填 默认值 说明
text String 文本前缀
size Int 10 最大文本数量
mode String "match" 枚举为match,suggest
match: 较严格的常规搜索,本质是与关系、无视顺序的AND字词match;
suggest:前缀模式基于内存检查关联词语,基于内存性能更好。

返回参数

参数 类型 是否必填 说明
code Int 状态码
data Object 关联搜索对象
--key String 关联文本
--value Int 文本分数
message String 处理信息

请求样例

  1. # 请求数据 match模式
  2. {
  3. "text": "北京",
  4. "size": 10,
  5. "mode": "match"
  6. }
  7. # 响应数据 match模式: 成功
  8. {
  9. "code": 0,
  10. "message": "请求成功",
  11. "data": {
  12. "[中超]北京国安1-2上海上港": 1
  13. }
  14. }
  15. # 请求数据2
  16. {
  17. "text": "北京市",
  18. "size": 10,
  19. "mode": "suggest"
  20. }
  21. # 响应数据2: 成功
  22. {
  23. "code": 0,
  24. "message": "请求成功",
  25. "data": {
  26. "北京市反腐败追逃追赃工作会议召开": 2,
  27. "北京师范大学珠海分校": 1
  28. }
  29. }

[POST] 新建词语

说明

用于创建新词语,并设定分类和分数。

请求方式

[POST](json) {search_completion_server}/word

请求头

参数名称 参数值
Content-Type application/json

请求参数

参数 类型 是否必填 默认值 说明
text String 词语内容
word_type List 当传入此参数时必须有值;
元素枚举为: phrase, topic
weight Int 1 词语分数

返回参数

参数 类型 是否必填 说明
code Int 状态码
data Object 数据内容
message String 处理信息

请求样例

  1. # 请求样例
  2. {
  3. "text": "北京测试",
  4. "weight": 200,
  5. "word_type": ["phrase", "topic"]
  6. }
  7. # 响应样例: 成功
  8. {
  9. "code": 0,
  10. "message": "创建成功",
  11. "data": {}
  12. }
  13. # 响应样例: 失败,数据已存在
  14. {
  15. "code": 1101,
  16. "message": "数据'北京测试'已存在",
  17. "data": {}
  18. }
  19. # 响应样例: 失败,word_type传入空列表
  20. {
  21. "code": 1101,
  22. "message": "参数'word_type'不可为空",
  23. "data": {}
  24. }

[PUT] 修改词语

说明

用于修改词语属性,不可修改词语本身

请求方式

[PUT](json) {search_completion_server}/word

请求头

参数名称 参数值
Content-Type application/json

请求参数

参数 类型 是否必填 默认值 说明
text String 词语内容
word_type List 当传入此参数时必须有值;
元素枚举为: phrase, topic
weight Int 10 词语分数

返回参数

参数 类型 是否必填 说明
code Int 状态码
data Object 数据内容
message String 处理信息

请求样例

  1. # 请求样例
  2. {
  3. "text": "北京测试",
  4. "weight": 200,
  5. "word_type": ["phrase", "topic"]
  6. }
  7. # 响应样例: 成功
  8. {
  9. "code": 0,
  10. "message": "创建成功",
  11. "data": {}
  12. }
  13. # 响应样例: 失败,数据已删除
  14. {
  15. "code": 1101,
  16. "message": "数据'北京测试'已删除",
  17. "data": {}
  18. }
  19. # 响应样例: 失败,数据不存在
  20. {
  21. "code": 1101,
  22. "message": "数据'北京测试'不存在",
  23. "data": {}
  24. }

[DELETE] 删除词语

说明

用于修改词语属性,不可修改词语本身

请求方式

[PUT](json) {search_completion_server}/word

请求头

参数名称 参数值
Content-Type application/json

请求参数

参数 类型 是否必填 默认值 说明
text String 词语内容

返回参数

参数 类型 是否必填 说明
code Int 状态码
data Object 数据内容
message String 处理信息

请求样例

  1. # 请求样例
  2. {
  3. "text": "北京测试"
  4. }
  5. # 响应样例: 成功
  6. {
  7. "code": 0,
  8. "message": "删除成功",
  9. "data": {}
  10. }
  11. # 响应样例: 失败,数据不存在
  12. {
  13. "code": 1101,
  14. "message": "数据'北京测试'不存在",
  15. "data": {}
  16. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注