@heavysheep
2021-01-18T18:01:00.000000Z
字数 3393
阅读 480
文档
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 ,suggest match : 较严格的常规搜索,本质是与关系、无视顺序的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": {}
}