如何使用FastSearch表达式,过滤检索结果

FastSearch启动之后,会监听一个TCP端口,接收来自客户端的搜索请求。处理http请求部分使用gin框架。

多数据库支持

从1.1版本开始,我们支持了多数据库,API接口中通过get参数来指定数据库。

如果不指定,默认数据库为default

如:api/index?database=db1 其他post参数不变

如果指定的数据库名没有存在,将会自动创建一个新的数据库。如果需要删除,直接删除改数据库目录,然后重启FastSearch即可。

表达式支持

操作符含义示例
Trim清除空格
IN包含
NotIN不包含
Like模模糊符匹配
==相等
<小于
<=小且等于
>=大且等于
>大于
!=不等于
+
-
*
/
%
&&逻辑与
||逻辑或
!逻辑非
(左括号
)右括号
[左中括号
]右中括号
,逗号
示例:
说明:索引添加的document对象,均可以作为变量使用
{
  "id": "id",
  "flag": "标识",
  "tags": "标签",
  "document": {
    title:"标题",
    hot:10,
    url: "http://www.baidu.com"
  }
}
过滤条件示例1: 标题为"中国" 且 热度大于10
(document.title Like  '中国') && (document.hot > 10) 
过滤条件示例1: 标题为"中国" 且 热度大于10

增加/修改索引

需要在query参数中指定数据库名database=default

接口地址/api/index
请求方式POST
请求类型application/json

请求

字段类型必选描述
idstring文档的主键id,需要保持唯一性,如果id重复,将会覆盖直接的文档。
titlestring标题
flagstring标识
tagsstring标签
textstring需要索引的文本块
documentobject附带的文档数据,json格式,搜索的时候原样返回

query参数(params-data)

字段类型必选描述
databasestring指定数据库名
  • POST /api/index
{
  "id": "no-1",
  "text": "我爱中国",
  "title":"我爱中国",
  "flag":"标识",
  "tags":" 标签,
  "document": {
    "title": "我爱中国",
    "number": 223
  }
}
  • 命令行
curl -H "Content-Type:application/json" -X POST --data '{"id":88888,"text":"我爱中国","document":{"title":"我爱中国","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": "s-1",
    "text": "我爱中国",
    "title":"我爱中国",
    "flag":"标识",
    "tags":" 标签,
    "document": {
      "title": "我爱中国",
      "number": 223
    }
  },
  {
    "id": "s-2",
    "text": "我爱长沙",
    "title":"我爱中国",
    "flag":"标识",
    "tags":" 标签,
    "document": {
      "title": "我爱长沙",
      "number": 123
    }
  }
]

删除索引

与以上接口一样,也需要在query参数中指定数据库名database=default

接口地址/api/index/remove
请求方式POST
请求类型application/json

请求

字段类型必选描述
idstring文档的主键id
  • POST /api/remove
{
  "id": 88888
}
  • 命令行
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"
}

查询索引

FastSearch提供了一种查询方式,按照文本查询。与其他Nosql数据库不同,FastSearch不支持按照文档的其他查询。

接口地址/api/query
请求方式POST
请求类型application/json

请求

字段类型必选描述
querystring查询的关键词,都是or匹配
pageint页码,默认为1
limitint返回的文档数量,默认为100,没有最大限制,最好不要超过1000,超过之后速度会比较慢,内存占用会比较多
orderstring排序方式,取值ascdesc,默认为desc,按id排序,然后根据结果得分排序
highlightobject关键字高亮,相对text字段中的文本
negativeobject过滤负向词开关
scoreExpstring根据文档的字段计算分数,然后再进行排序,例如:score+document.hot*10,表达式中score为关键字的分数,document.hot为document中的hot字段
filterExpstring根据表达式过滤结果,然后再进行排序,例如:document.flag Like '中国'
maxlimitint当使用表达式时,限制最大输出结果,默认为1000,此值设置太大影响性能

query参数(params-data)

字段类型必选描述
databasestring指定数据库名,不填默认为default

negative

配置以后,符合条件的负向关键词将会被过滤

字段描述
query关键词过滤 请求时满足条件直接拦截true/false
content结果过滤 搜索结果满足条件时过滤true/false

highlight

配置以后,符合条件的关键词将会被preTag和postTag包裹

字段描述示例
preTag关键词前缀
postTag关键词后缀
  • 示例
{
  "query": "我爱中国",
  "page": 1,
  "limit": 10,
  "maxlimit": 1000,
  "filterExp": "flag Like '中国'",
  "scoreExp": "score+document.hot*10",
  "order": "desc",
  "negative": {
    "query" : true,
    "content" : false
  },
  "highlight": {
    "preTag": "<span style='color:red'>",
    "postTag": "</span>"
  }
}
  • POST /api/query
{
  "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

响应

字段类型描述
timefloat32搜索文档用时
totalint符合条件的数量
pageCountint页总数
pageint当前页码
limitint每页数量
documentsarray文档列表,参考索引文档
{
  "state": true,
  "message": "success",
  "data": {
    "time": 2.75375,
    "total": 13487,
    "pageCount": 1340,
    "page": 1,
    "limit": 10,
    "documents": [
      {
        "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/db/drop?database=db_name

响应

{
  "state": true,
  "message": "success"
}

在线分词

接口地址/api/word/cut
请求方式GET

请求参数

字段类型必选描述
qstring关键词

请求

curl http://127.0.0.1:5678/api/word/cut?q=我爱中国

响应

{
  "state": true,
  "message": "success",
  "data": [
    "我",
    "爱",
    "中国",
  ]
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值