gofound
启动之后,会监听一个TCP端口,接收来自客户端的搜索请求。处理http请求部分使用gin
框架。
从1.1版本开始,我们支持了多数据库,API接口中通过get参数来指定数据库。
如果不指定,默认数据库为default
。
如:api/index?database=db1
其他post参数不变
如果指定的数据库名没有存在,将会自动创建一个新的数据库。如果需要删除,直接删除改数据库目录,然后重启gofound即可。
需要在query参数中指定数据库名database=default
接口地址 |
/api/index |
请求方式 |
POST |
请求类型 |
application/json |
字段 |
类型 |
必选 |
描述 |
id |
uint32 |
是 |
文档的主键id,需要保持唯一性,如果id重复,将会覆盖直接的文档。 |
text |
string |
是 |
需要索引的文本块 |
document |
object |
是 |
附带的文档数据,json格式,搜索的时候原样返回 |
query参数(params-data)
字段 |
类型 |
必选 |
描述 |
database |
string |
是 |
指定数据库名 |
{
"id": 88888,
"text": "深圳北站",
"document": {
"title": "阿森松岛所445",
"number": 223
}
}
curl -H "Content-Type:application/json" -X POST --data '{"id":88888,"text":"深圳北站","document":{"title":"阿森松岛所445","number":223}}' http://127.0.0.1:5678/api/index?database=default
{
"state": true,
"message": "success"
}
与添加单个索引一样,也需要在query参数中指定数据库名database=default
接口地址 |
/api/index/batch |
请求方式 |
POST |
请求类型 |
application/json |
参数与单个一致,只是需要用数组包裹多个json对象,例如:
[
{
"id": 88888,
"text": "深圳北站",
"document": {
"title": "阿森松岛所445",
"number": 223
}
},
{
"id": 22222,
"text": "北京东站",
"document": {
"title": "123123123",
"number": 123123
}
}
]
与以上接口一样,也需要在query参数中指定数据库名database=default
接口地址 |
/api/index/remove |
请求方式 |
POST |
请求类型 |
application/json |
字段 |
类型 |
必选 |
描述 |
id |
uint32 |
是 |
文档的主键id |
curl -H "Content-Type:application/json" -X POST --data '{"id":88888}' http://127.0.0.1:5678/api/remove?database=default
{
"state": true,
"message": "success"
}
GoFound
提供了一种查询方式,按照文本查询。与其他Nosql数据库不同,GoFound
不支持按照文档的其他查询。
接口地址 |
/api/query |
请求方式 |
POST |
请求类型 |
application/json |
字段 |
类型 |
必选 |
描述 |
query |
string |
是 |
查询的关键词,都是or匹配 |
page |
int |
否 |
页码,默认为1 |
limit |
int |
否 |
返回的文档数量,默认为100,没有最大限制,最好不要超过1000,超过之后速度会比较慢,内存占用会比较多 |
order |
string |
否 |
排序方式,取值asc 和desc ,默认为desc ,按id排序,然后根据结果得分排序 |
highlight |
object |
否 |
关键字高亮,相对text字段中的文本 |
scoreExp |
string |
否 |
根据文档的字段计算分数,然后再进行排序,例如:score+[document.hot]*10,表达式中score为关键字的分数,document.hot为document中的hot字段 |
query参数(params-data)
字段 |
类型 |
必选 |
描述 |
database |
string |
否 |
指定数据库名,不填默认为default |
配置以后,符合条件的关键词将会被preTag和postTag包裹
字段 |
描述 |
preTag |
关键词前缀 |
postTag |
关键词后缀 |
{
"query": "上海哪里好玩",
"page": 1,
"limit": 10,
"order": "desc",
"highlight": {
"preTag": "<span style='color:red'>",
"postTag": "</span>"
}
}
{
"query": "深圳北站",
"page": 1,
"limit": 10,
"order": "desc"
}
curl -H "Content-Type:application/json" -X POST --data '{"query":"深圳北站","page":1,"limit":10,"order":"desc"}' http://127.0.0.1:5678/api/query
字段 |
类型 |
描述 |
time |
float32 |
搜索文档用时 |
total |
int |
符合条件的数量 |
pageCount |
int |
页总数 |
page |
int |
当前页码 |
limit |
int |
每页数量 |
documents |
array |
文档列表,参考索引文档 |
{
"state": true,
"message": "success",
"data": {
"time": 2.75375,
"total": 13487,
"pageCount": 1340,
"page": 1,
"limit": 10,
"documents": [
{
"id": 1675269553,
"text": "【深圳消费卡/购物券转让/求购信息】- 深圳赶集网",
"document": {
"id": "8c68e948de7c7eb4362de15434a3ace7",
"title": "【深圳消费卡/购物券转让/求购信息】- 深圳赶集网"
},
"score": 3
},
{
"id": 88888,
"text": "深圳北站",
"document": {
"number": 223,
"title": "阿森松岛所445"
},
"score": 2
},
{
"id": 212645608,
"text": "【深圳美容美发卡转让/深圳美容美发卡求购信息】- 深圳赶集网",
"document": {
"id": "d3ce16b68a90833cbc20b8a49e93b9cd",
"title": "【深圳美容美发卡转让/深圳美容美发卡求购信息】- 深圳赶集网"
},
"score": 1.5
},
{
"id": 1191140208,
"text": "【深圳赶集网】-免费发布信息-深圳分类信息门户",
"document": {
"id": "44be60a1d8b54c431e5511804062ae62",
"title": "【深圳赶集网】-免费发布信息-深圳分类信息门户"
},
"score": 1.5
},
{
"id": 4133884907,
"text": "【深圳购物卡转让/深圳购物卡求购信息】- 深圳赶集网",
"document": {
"id": "f25bb8136e8c2b02e3fcd65627a9ddbc",
"title": "【深圳购物卡转让/深圳购物卡求购信息】- 深圳赶集网"
},
"score": 1
},
{
"id": 206909132,
"text": "【沙嘴门票/电影票转让/求购信息】- 深圳赶集网",
"document": {
"id": "63ca3ea4ffd254454e738a0957efedc2",
"title": "【沙嘴门票/电影票转让/求购信息】- 深圳赶集网"
},
"score": 1
},
{
"id": 220071473,
"text": "【深圳健身卡转让/深圳健身卡求购信息】- 深圳赶集网",
"document": {
"id": "72d3d650c8a8a4e73b89b406f6dc76ef",
"title": "【深圳健身卡转让/深圳健身卡求购信息】- 深圳赶集网"
},
"score": 1
},
{
"id": 461974720,
"text": "铁路_论坛_深圳热线",
"document": {
"id": "73c96ac2c23bc0cb4fb12ce7660c8b35",
"title": "铁路_论坛_深圳热线"
},
"score": 1
},
{
"id": 490922879,
"text": "【深圳购物卡转让/深圳购物卡求购信息】- 深圳赶集网",
"document": {
"id": "93be0f35c484ddcd8c83602e27535d96",
"title": "【深圳购物卡转让/深圳购物卡求购信息】- 深圳赶集网"
},
"score": 1
},
{
"id": 525810194,
"text": "【深圳购物卡转让/深圳购物卡求购信息】- 深圳赶集网",
"document": {
"id": "e489dd19dce0de2c9f4e59c969ec9ec0",
"title": "【深圳购物卡转让/深圳购物卡求购信息】- 深圳赶集网"
},
"score": 1
}
],
"words": [
"深圳",
"北站"
]
}
}
接口地址 |
/api/status |
请求方式 |
GET |
curl http://127.0.0.1:5678/api/status
{
"state": true,
"message": "success",
"data": {
"index": {
"queue": 0,
"shard": 10,
"size": 531971
},
"memory": {
"alloc": 1824664656,
"heap": 1824664656,
"heap_idle": 10008625152,
"heap_inuse": 2100068352,
"heap_objects": 3188213,
"heap_released": 9252003840,
"heap_sys": 12108693504,
"sys": 12700504512,
"total": 11225144273040
},
"status": "ok",
"system": {
"arch": "arm64",
"cores": 10,
"os": "darwin",
"version": "go1.18"
}
}
}
接口地址 |
/api/db/drop |
请求方式 |
GET |
curl http://127.0.0.1:5678/api/drop?database=db_name
{
"state": true,
"message": "success"
}
接口地址 |
/api/word/cut |
请求方式 |
GET |
curl http://127.0.0.1:5678/api/word/cut?q=上海和深圳哪个城市幸福指数高
{
"state": true,
"message": "success",
"data": [
"上海",
"深圳",
"哪个",
"城市",
"幸福",
"指数"
]
}