diff --git a/docs/API.md b/docs/API.md new file mode 100644 index 0000000..717c55c --- /dev/null +++ b/docs/API.md @@ -0,0 +1,119 @@ +检索服务接口列表 +==== +## 关键词搜索 +---- +### 接口描述 +>对用户输入的关键词进行相关结果的搜索匹配,搜索结果默认按照关键词与文档的相关性得分进行排序。 + +### URL +```html +http://127.0.0.1/index/search +``` +### Http Method +GET +### Http返回格式 +JSON +### Http请求参数说明 +| 参数 | 类型 | 是否必需 | 描述 | +| ------------ | ------------ | ------------ | ------------ | +| appid | int | 是 | appname对应的ID | +| key | string | 否 | 搜索查询词 | +| key_and | string | 否 | 包含全部关键词 | +| key_invert | string | 否 | 过滤关键词 | +| page_index | int | 否 | 页码 | +| page_size | int | 否 | 每页条数 | +| sort_type | int | 否 | 排序方式 | +| sort_field | string | 否 | 排序字段 | +| fields | string | 否 | 返回指定字段值 | +说明:key支持多字段检索,如key为”content:京东 author:张三”表示搜索content字段包含京东并且author是张三的记录,其中city为应用内配置的字段名,应用可以自定义字段名称。 +应用的定义及支持的字段类型可参考:[项目配置文件](https://gitee.com/jd-platform-opensource/isearch#%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6) +### Http返回结果说明 +| 字段 | 类型 | 描述 | +| ------------ | ------------ | ------------ | +| code | int | 执行结果 | +| count | int | 结果总数 | +| result | string | 结果内容 | +### CURL调用示例 +```html +curl 'http://127.0.0.1/index/search?page_index=0&key=京东&appid=10001' +``` +### 成功返回示例 +```json +{ +"code": 0, +"count": 10, +"result": [7976,12984,11705,2572,239,474,343,290,10086,318] +} +``` +### 错误返回示例 +```json +{ +"code": -1, +"message": "keyword is required" +} +``` + +## 索引上报 +---- +### 接口描述 +>该接口上传文章内容至普通索引服务,生成普通索引表。 + +### URL +```html +http://127.0.0.1/index/common +``` +### Http Method +POST +### Http返回格式 +JSON +### Http请求参数说明 +| 参数 | 类型 | 是否必需 | 描述 | +| ------------ | ------------ | ------------ | ------------ | +| appid | string | 是 | 用户组id | +| fields_count | int | 是 | 内容数量 | +| table_content | object | 是 | 内容对象 | +#### table_content的参数 +| 参数 | 类型 | 是否必需 | 描述 | +| ------------ | ------------ | ------------ | ------------ | +| cmd | string | 是 | 操作类型 | +| fields | object | 是 | 文章对象 | +注:cmd取值包括add,delete,update。 +#### fields的参数 +| 参数 | 类型 | 是否必需 | 描述 | +| ------------ | ------------ | ------------ | ------------ | +| doc_id | string | 是 | 文章ID | +| weight | int | 是 | 文章权重 | +| author | string | 是 | 文章作者 | +| title | string | 是 | 文章标题 | +| content | string | 是 | 文章内容 | +### Http 返回结果说明 +| 参数 | 类型 | 描述 | +| ------------ | ------------ | ------------ | +| code | int | 执行结果 | +| message | string | 信息描述 | +### CURL调用示例 +```html +curl -X POST \ + http://127.0.0.1/index/common \ + -H 'content-type: application/json' \ + -d '{ + "appid": 10001, + "fields_count": 1, + "table_content": [{ + "cmd": "add", + "fields": { + "doc_id": "28394556", + "weight": 218, + "author": "zhangsan", + "title": " 京东阅读电子阅读器即将上线 ", + "content": "今天小编得到了一个令人振奋的消息!它是什么呢?京东阅读官方即将推出搭载京东阅读客户端" + } + }] + }' +``` +### 成功返回示例 +```json +{ +"code": 0 +} +``` diff --git a/docs/bench.md b/docs/bench.md new file mode 100644 index 0000000..6c14797 --- /dev/null +++ b/docs/bench.md @@ -0,0 +1,38 @@ +### 测试内容 + +本次测试是针对isearch的index_read进行的压力测试,只对查询接口进行压力测试,单机压力测试通过tcp进行请求。 + +### 测试方法 + +本次采用自己编译的测试工具isearchbench,原理是开启多个线程,每个线程依次与index_read建立tcp连接,发送检索请求,并等待结果返回。测试数据来源于discovery_release_article表,共100w+文档,事先已经将索引导入到机器中。 + +### 测试目标 + +获取在单机部署情况下查询接口最大QPS值 + +### 测试环境 + +| 机器 | 机器编号 | 操作系统 | CPU | 内存 | +| ---- | ---- | ---- | ---- | ---- | +| isearch机器 | A | CentOS Linux release 7.2.1511 | 4核 | 8G | +| 压测脚本机器 | B | CentOS Linux release 7.2.1511 | 4核 | 8G | +| 压测脚本机器 | C | CentOS Linux release 7.2.1511 | 4核 | 8G | + +### 性能测试结果 + +以下为压测的详细数据: + +| 检索词 | 机器数 | 每台机器进程数 | 总进程数 | 每个进程开启线程数 | 每个线程请求数 | 总请求数 | 总耗时(平均) | index_read进程cpu | cache进程cpu | qps | +|-----|-----|---------|------|-----------|---------|--------|---------|---------|----------|-------| +| 京东 | 2 | 2 | 4 | 200 | 500 | 400000 | 37s | 98% | 35% | 10272 | +| 京东 | 2 | 2 | 4 | 200 | 1000 | 800000 | 84s | 98% | 35% | 9574 | + +以下为压测时通过top查看index_read进程所在机器的信息: + +![bench-top](http://storage.jd.com/search-index/image/bench-top.png) + +以下为请求曲线: + +![bench-curve](http://storage.jd.com/search-index/image/bench-curve.png) + +可以得出index_read进程的qps最高为10272。 \ No newline at end of file