@heavysheep
2021-01-18T10:01:00.000000Z
字数 3393
阅读 642
文档20210113: 更新了match模式并设为默认,处理关联搜索更贴近需求。
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
外部测试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,
搜索补全指常规搜索中弹出的下拉补全框,当字符变化时,即应调用此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 | 是 | 处理信息 |
# 请求数据{"text": "北","size": 12}# 响应数据: 成功{"code": 0,"message": "请求成功","data": {"北京": 1716,"北京市": 323,"北方": 154,"北青网": 110,"北上": 92,"北约": 91,"北斗": 83,"北向": 61,"北部": 53,"北美": 50,"北王庄": 43,"北路": 38}}
关联搜索指搜索后关联的其他搜索话题,当确认搜索时,即应调用此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,suggestmatch: 较严格的常规搜索,本质是与关系、无视顺序的AND字词match;suggest:前缀模式基于内存检查关联词语,基于内存性能更好。 |
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| code | Int | 是 | 状态码 |
| data | Object | 是 | 关联搜索对象 |
| --key | String | 是 | 关联文本 |
| --value | Int | 是 | 文本分数 |
| message | String | 是 | 处理信息 |
# 请求数据 match模式{"text": "北京","size": 10,"mode": "match"}# 响应数据 match模式: 成功{"code": 0,"message": "请求成功","data": {"[中超]北京国安1-2上海上港": 1}}# 请求数据2{"text": "北京市","size": 10,"mode": "suggest"}# 响应数据2: 成功{"code": 0,"message": "请求成功","data": {"北京市反腐败追逃追赃工作会议召开": 2,"北京师范大学珠海分校": 1}}
用于创建新词语,并设定分类和分数。
[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 | 是 | 处理信息 |
# 请求样例{"text": "北京测试","weight": 200,"word_type": ["phrase", "topic"]}# 响应样例: 成功{"code": 0,"message": "创建成功","data": {}}# 响应样例: 失败,数据已存在{"code": 1101,"message": "数据'北京测试'已存在","data": {}}# 响应样例: 失败,word_type传入空列表{"code": 1101,"message": "参数'word_type'不可为空","data": {}}
用于修改词语属性,不可修改词语本身。
[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 | 是 | 处理信息 |
# 请求样例{"text": "北京测试","weight": 200,"word_type": ["phrase", "topic"]}# 响应样例: 成功{"code": 0,"message": "创建成功","data": {}}# 响应样例: 失败,数据已删除{"code": 1101,"message": "数据'北京测试'已删除","data": {}}# 响应样例: 失败,数据不存在{"code": 1101,"message": "数据'北京测试'不存在","data": {}}
用于修改词语属性,不可修改词语本身。
[PUT](json) {search_completion_server}/word
| 参数名称 | 参数值 |
|---|---|
| Content-Type | application/json |
| 参数 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
| text | String | 是 | 词语内容 |
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| code | Int | 是 | 状态码 |
| data | Object | 是 | 数据内容 |
| message | String | 是 | 处理信息 |
# 请求样例{"text": "北京测试"}# 响应样例: 成功{"code": 0,"message": "删除成功","data": {}}# 响应样例: 失败,数据不存在{"code": 1101,"message": "数据'北京测试'不存在","data": {}}