是否有类似Solr或Elasticsearch的东西只能在Javascript中在客户端上使用?

时间:2012-06-15 14:01:33

标签: javascript search indexing storage

我们有一个小数据集,并希望以巧妙的方式搜索它,以便填充自动完成输入框。用户想要搜索一种类型的实体,但应该能够输入相关类型的属性。

由于我们的应用程序是针对特定行业的,因此我将尝试将抽象问题置于更相关的背景中:

示例:用户想要选择某种类型的水果,并可以使用水果的许多不同特征来搜索它。她可以搜索它的名字( apple ),相同水果的特殊类型(金色美味),本地化版本( apfel تفاح pomme ),还有其他特征,例如含有水果的食物( pandowdy cider ),甚至结果从对其描述的全文检索。

通常我会想要使用solrelasticsearch之类的东西,但我们的数据集并不是很大,每个最多200个元素的4-5个关联实体。此外,它将保持非常静态,每隔一周添加一些编辑。所以我们考虑使用浏览器的数据存储来管理和搜索某种索引。问题是,在我们的研究中,我们找不到任何远远超出抽象Web SQLIndexed DB的内容。

是否有任何项目或库可以执行solr或elasticsearch之类的操作,并且可以在客户端用于小型数据集?我们正在寻找以下功能

  • 快速搜索
  • 预处理(标记化,过滤......)
  • 排序
  • 排名,查询提升

它应该适用于最近的浏览器和移动,其他浏览器的愚蠢后备(即全文搜索)可以接受

1 个答案:

答案 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进入,这不是很好,但可能对你的数据足够好。