概述
小书匠从 8.4.17
版本开始,支持高级的搜索语法,通过该功能,用户可以将自己在小书匠内的文章更精确的查询出来。
入口
语法
搜索语法由 文本段 和 条件段 组成。
文本段
文本段就是需要进行全文搜索的关键词,文本段内可以包含多个文本,文本之间用空格分开。
多关键词搜索时,关键词之间使用或
关系。即只要文章包含其中一个关键词,该文章就符合搜索结果。
如果想多个关键词进行与
关系处理,只需要将多个关键词之间用 +
符号链接即可。
文本段支持排除语法,只要在关键词前加 -
符号时,系统将过虑掉该关键词搜索出来的文章。
示例
- 搜索单个关键词
清单
- 1清单
- 搜索多个关键词
清单
和电脑
- 1清单 电脑
- 搜索包含
清单
, 但不包含公司
的文章
- 1清单 -公司
文本段分词查询
为了提高索引速度及搜索速度,系统会采用倒排索引的算法,对文本段进行分词索引,查询时,再根据分词后的内容进行查询.具体原理,可以查看这篇文章 利用中文分词,在小书匠上改进使用体验
比如,用户在搜索 待办清单
这个词时,系统会自动进行分词操作,将这个词分成 待
, 办
, 清单
,并按 与
的逻辑关系,把所有结果集显示出来.也就是文章里只要同时包含 待
, 办
, 清单
这三个子词,不管他们的顺序组合,系统都会一并显示出来.
为什么会分成 待
, 办
, 清单
这三个子词,而不是 待办
和 清单
这两个?
目前分词逻辑是按照系统内置常用的分词逻辑处理的.因为汉字没办法像英文那样,通过空格就可以很明显区分出词与词之间的界线,所以在分词上是有差异的,对于有岐义的词,不常见的词,或者专业领域内的词,系统都没办法识别出来的.特别是一些新兴词,比如 小红书
,网红
, 有些用户认为这就是一个词,但系统还是会把他拆成三个字 小
, 红
和 书
, 网
和 红
.
怎么判断系统如何分词?
可以在小书匠的编辑区里,输入想要分词的语句, 比如这样的语句 这两个清单跟待办清单类似,不同的地方是,查找文章内的强调句子,高亮句子,或者引用句子。 比如,“网红奶茶”、“网红蛋糕”、“网红餐厅”、“网红包包”……
, 我们可以用鼠标双击 类似
这个位置,系统就自动选择这个词,说明 类似
这个词系统是识别的.
如果我们用鼠标双击待办
, 就会发现,系统只能选中一个字, 要吗是 待
, 要吗是 办
, 没办法自动完成 待办
这个词的选择,说明系统不识别这个词.
文本段不分词查询
不分词查询时,系统会进行全库扫描,搜索词将在文章内进行精准匹配。
系统默认使用的是自动分词查询,如果想使用不分词查询,需要将查询词用双引号包裹起来,比如 待办清单
, 需要写成这种格式"待办清单"
。
注: 每次全库扫描查询时,系统都会从 0 开始索引,查询速度会受电脑硬盘读写速度和 cpu 速度影响。相对于分词查询会慢很多,但结果更加的准确。
条件段
条件段就是可以根据文章的属性进行过滤搜索结果集的一段。条件段内可以包含多个条件,多个条件之间需要用空格分开。 多个条件结果集使用的是 与
关系,即必须同时满足多个条件的文章。
单个条件格式为 属性:属性值
目前系统支持的 属性 主要有 标签tag
, 分类category
,标识flag
,创建时间date
条件段支持排除语法,只要在 属性 前加 -
符号, 就可以将该条件过滤出来的文章排除出最终结果集。
注:
为了更好的理解条件段,可以先阅读过滤器这篇文章。大部值的属性,都是基于过滤器设计的。
标签 tag
格式
单个标签: tag:标签值
多个标签: tag:标签值[,标签值,标签值]
多个标签以逗号分开
示例
- 搜索标签是
工作日志
的文章
- 1tag:工作日志
- 搜索标签是
工作日志
和互联网
,但不包含标签电商
的文章,同时文章全文搜索需要包含联网
关键词
- 1联网 tag:工作日志,互联网 -tag:电商
分类 category
格式
category:分类值
分类属性还支持起始于
功能
category:xsjStartsWith##分类值
标识 flag
格式
flag:标识值
创建时间 date
格式
date:时间值
时间属性对应的时间值支持三种格式,精确时间,时间范围 和相对时间。
所有时间最小单位为天。
精确时间
格式
date:YYYYMMDD
示例
- 搜索 2020 年 2 月 11 日创建的所有文章
- 1date:20200211
时间范围
格式
date:YYYYMMDD/YYYYMMDD
示例
- 搜索在 2020 年 3 月 15日 到 2020 年 5 月 1 日之间的文章,文章需要包含关键字
工作
- 1工作 date:20200315/20200501
相对时间
格式
date:-[数值][单位符号]
注: 数值前面的 -
符号
单位符号支持
天:d, day
星期: w, week,weeks
月:mon, month, months,M
季:Q,Quarter,Quarters
年:y,year,years
今天: now
示例
- 最近1天的文章
- 1date:-1d
- 最近2个月的文章,但不包含2020年12月3日的文章
- 1date:-2M -date:20201203
注
- 在文本段或者条件段里,必须包含一个非排除语法生成的结果集。比如只有
-工作
这样的搜索,系统将返回空的文件列表。