我们有一个小数据集,并希望以巧妙的方式搜索它,以便填充自动完成输入框。用户想要搜索一种类型的实体,但应该能够输入相关类型的属性。
由于我们的应用程序是针对特定行业的,因此我将尝试将抽象问题置于更相关的背景中:
示例:用户想要选择某种类型的水果,并可以使用水果的许多不同特征来搜索它。她可以搜索它的名字( apple ),相同水果的特殊类型(金色美味),本地化版本( apfel , تفاح, pomme ),还有其他特征,例如含有水果的食物( pandowdy , cider ),甚至结果从对其描述的全文检索。
通常我会想要使用solr或elasticsearch之类的东西,但我们的数据集并不是很大,每个最多200个元素的4-5个关联实体。此外,它将保持非常静态,每隔一周添加一些编辑。所以我们考虑使用浏览器的数据存储来管理和搜索某种索引。问题是,在我们的研究中,我们找不到任何远远超出抽象Web SQL或Indexed DB的内容。
是否有任何项目或库可以执行solr或elasticsearch之类的操作,并且可以在客户端用于小型数据集?我们正在寻找以下功能
它应该适用于最近的浏览器和移动,其他浏览器的愚蠢后备(即全文搜索)可以接受
答案 0 :(得分:3)
<强>索引资料强> 使用起来非常繁琐,我认为如果不进行一些修改,它不会做你想做的事。
<强>的WebSQL 强> 我使用带有全文(FT3)的Chrome WebSql(sqlite),您可以使用它进行一些高级查询,并自动对结果进行加权。例如:
table_ft3 structure = [id,name,description,pets]
你可以查询 “SELECT id FROM table_ft3 WHERE table_ft3 MATCH'word1 word2 wordfuzzy * -notme + required name:john edwar * mary pets:dog cat'”
但是,这仅限于Chrome。在一张560k行的表格上,每行约12个单词,速度非常快,10ms甚至更短。
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进入,这不是很好,但可能对你的数据足够好。