Kar*_*iem 6 javascript indexing search storage
我们有一个小的数据集,并希望以巧妙的方式搜索它,以填充自动完成的输入框.用户想要搜索一种类型的实体,但应该能够放入相关类型的属性.
由于我们的应用程序是针对特定行业的,我将尝试将抽象问题放入更相关的背景中:
示例:用户想要选择某种类型的水果,并可以使用水果的许多不同特征来搜索它.她可能会搜索它的名字(苹果),特殊类型的相同水果(金色美味),本地化版本(apfel,تفاح,pomme),还有其他特征,例如含有水果的食物(pandowdy,苹果酒),甚至对其描述进行全文搜索的结果.
通常我会想要使用像solr或elasticsearch这样的东西,但我们的数据集并不是很大,每个最多200个元素的4-5个相关实体.此外,它将保持非常静态,每隔一周添加一些编辑.所以我们考虑使用浏览器的数据存储来管理和搜索某种索引.问题是,在我们的研究中,我们找不到任何远远超出抽象Web SQL或Indexed DB的东西.
是否有任何项目或库可以执行solr或elasticsearch之类的操作,并且可以在客户端用于小型数据集?我们正在寻找以下功能
它应该适用于最近的浏览器和移动,其他浏览器(即全文搜索)可接受的愚蠢后备
小智 3
IndexedDB 使用起来非常麻烦,我认为如果不进行一些修改它就不会做你想要的事情。
WebSql 我使用 Chrome WebSql (sqlite) 和全文 (FT3),您可以用它进行一些高级查询,它会自动对结果进行加权。例如:
table_ft3 结构=[id, 名称, 描述, 宠物]
您可以使用“SELECT id FROM table_ft3 WHERE table_ft3 MATCH 'word1 word2 wordfuzzy* -notme +required name:john edwar* mary pets:dog cat'”进行查询
然而,这仅限于 Chrome。在包含 560k 行、每行大约 12 个字的表上,速度非常快,10 毫秒或更短。
JSLinq - http://jslinq.codeplex.com/ 这对于大型数据集很有用,通过将所有内容存储在内存中,速度非常快,但我认为它没有任何高级权重。它确实有一个额外的好处,那就是允许您编写自己的复杂查询函数。
JSII - http://karussell.wordpress.com/2010/11/02/jsii-full-text-search-in-1k-loc-of-javascript/ 这使用 Lucene 样式加权,在 20k 行上,它以 50ms 的速度进入这不是很好,但对于您的数据来说可能已经足够了。