动机:我有一个HTML页面,其中包含一个搜索框,后跟一堆段落(具有唯一的id并且由JavaScript数组生成).当用户在框中键入搜索查询并按Enter键时,如果所有段落与查询不匹配,则应隐藏所有段落(即显示设置为无).
我目前的策略(使用jQuery):
>通过将查询字符串分割为空格将查询字符串分隔成关键字数组.
使用$(‘p’)隐藏所有段落.hide().
>对于每个关键字,使用$(‘p:contains(“’keyword’”)’)显示一个包含它的段落.
哪个是非常有限的搜索功能,区分大小写,将所有关键字视为可选的,并且不提供操作符和/或括号.这也是低效的,因为即使已经匹配,每个关键字也会遍历每个字符串一次.
以下是我正在评估项目的图书馆(2013年7月).任何这些都应该能够提供搜索功能的核心.> http://lunrjs.com/
>内在的成绩,得分
> 13.8kb
>最近更新14天前(https://github.com/olivernn/lunr.js/commits/master)
> 10贡献者
>没有外部依赖
> http://kiro.me/projects/fuse.html
>模糊搜索
> 1.58 kb
>最后更新3个月前(https://github.com/olivernn/lunr.js/commits/master)
> 1贡献者
>没有外部依赖
> http://reyesr.github.io/fullproof/
>使用html5存储与优雅的降级
> 459 kb缩小
>最后更新4个月前(https://github.com/reyesr/fullproof/commits/master)
> 2贡献者
>没有外部依赖
> http://eikes.github.io/facetedsearch/
分页,模板内置
> 5.70kb
>最近更新2年前(https://github.com/eikes/facetedsearch/commits/master),但“骨干”分支在过去10个月内更新(https://github.com/eikes/facetedsearch/commits/backbone)
> 1贡献者
>依赖于jquery和下划线
如果你想建立自己的,这里有两个常见的源代码算法的实现,让你开始:
> https://github.com/fortnightlabs/snowball-js
> http://tartarus.org/martin/PorterStemmer/
对于处理布尔逻辑搜索运算符,也许this question about js query parsers将是有用的.