应该是第三次升级搜索功能了,前面的搜索采用mysql搜索并发大的情况下极度占用系统资源,本次升级后理论提高百倍/千倍数据处理能力,大促时可以不再限制搜索频率,另外还优化了一些东西实现高级搜索。有必要指出的是,出于性能优化设计,所有的文章大批量更新/发布后索引变动提交到操作队列中, 而并不是已经立即更新到磁盘上的索引数据库文件。因此搜索结果将不能立即体现出新增/修改文章,通常是若干秒。
链接原文搜索:
输入要搜索的链接,例如搜索http://www.zuanke8.com/thread-9350232-1-1.html 或者搜索https://www.douban.com/group/topic/310660730/ 会自动跳转对应文章,如果没有抓取会自动抓取对应文章。
高级搜索:
搜索:移动话费
同时检索标题和内容系统自动分词,需要混合区同时存在
搜索:移动 话费
用空格连接 2 个关键词, 用户手动分词比上面更明确
同时检索标题和内容,需要混合区同时存在
搜索:title:移动 话费
特别要求 title 标题字段包含 “移动“,标题不包含“移动“不搜索索引
搜索:content:移动 话费
特别要求 content 内容字段包含 “移动“,内容不包含“移动“不搜索索引
多个词语之间的“并且”、“或者”、“异或”关系
默认情况,系统采用“并且”关系,即您输入的多个词语(空格分开或系统自动切分以后)必须全部包含。 您也可以通过 AND 将这些关键词显式的强制要求全部出现。相应的,如果您需要只包括其中一个词即可, 那么用 OR 将它们连接起来。更有趣的是,如果有些情况您只想要其中的一个词,并且不要两者同时出现, 那么就用 XOR 连接。Note: 表达布尔关系的关键字必须全部大写,即:XOR, OR, AND
搜索:移动 话费
搜索:移动 AND 话费
// 这两者效果是相同的
搜索:移动 OR 话费
//只要求标题+内容匹配其中一个
搜索:移动 XOR 话费
// 表示必须包含其中一个词,并且不允许同时包含这两个词。
要求搜索结果中不含特定关键词
如果您发现搜索结果中,有某一类信息是您不希望看见的,而且这些信息都包含特定的关键词,那么请用减号或 NOT 语法,就可以去除所有这些含有特定关键词的网页。例如,搜索 “神雕侠侣”,希望是关于武侠小说方面 的内容,却发现很多关于电视剧方面的网页。这时希望排除所有包含“电视剧”的搜索结果。
神雕侠侣 -电视剧
神雕侠侣 NOT 电视剧
//以上两种是正确用法,Note: 前一个关键词和减号之间必须有空格分开,否则会被当连字符处理,减号和后一个关键词之间不能有空格。
神雕侠侣-电视剧
神雕侠侣 – 电视剧
// 不符合预期目的用法
组合关系的括号表达式
就像数学表达式中,括号具有显式的优先级,如果您需要非常复杂的搜索条件,就采用括号表达式来组合上述的条件。Tip: 在组合关键中允许嵌入字段搜索的语法。如:title:上海 OR title:公园
搜索:(杭州 AND 西湖) OR (杭州 AND 西溪湿地)) NOT (汽车 火车)
// 要求结果包含 “杭州+西湖” 或 “杭州 + 西溪湿地”,并且不能包含 “汽车 火车”
使用双引号进行精确匹配
如果输入的查询词较长,在经过系统词法分析后,给出的搜索结果中的查询词,可能是拆分的。 如果您对这种情况不满意,可以尝试给查询短句加上双引号,搜索结果就会要求词按顺序匹配。
搜索:上海科技大学
// 这时内部把搜索语句切割为:上海+科技+大学,要求搜索结果同时包含这三个词即可,但不要求它们的出现顺序,有可能先出现”科技“再出现”上海“,也有可能这三个词离得很远。
搜索:”上海科技大学”
// 加上引号后,要求搜索结果必须依次出现”上海+科技+大学“,要显得精准很多。
索引词之间的距离查询
如果您希望输入的多个关键词之间的在匹配结果中的位置距离不要太远,那么可以使用 NEAR 语法来进行搜索,默认要求它们的距离不超过 10。您还可以在 NEAR 后加上 /n 表示 具体的距离要求,n 是整数,这儿的距离指的是分词后的序号距离。
搜索:杭州 NEAR 西湖
// 要求结果中出现 “杭州” 和 “西湖”,并且距离不超过 10 个词
搜索:杭州 NEAR/5 西湖
要求它们距离不超过 5个词
如果您还希望检索结果中词汇出现的顺序与您的输入顺序一致,只要将 NEAR 换成 ADJ 即可, 注意这些语法词和布尔搜索一样,均必须全部大写。
搜索:杭州 ADJ 西湖
// 要求结果中先出现 “杭州” 再出现 “西湖”,并且距离不超过 10 个词
搜索:杭州 ADJ/3 西湖
// 要求它们距离不超过 3个词
发表回复