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

标签 javascript search indexing storage

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

由于我们的应用程序非常特定于行业,我将尝试将抽象问题置于更相关的上下文中:

示例:用户想要选择某一种水果,可以利用水果的很多不同特征来进行搜索。她可能会搜索其名称(apple)、相同水果的特殊类型(golden delicious)、本地化版本(apfel تواح, pomme),还有其他特征,例如含有水果的食物(pandowdy, cider),甚至是结果来自对其描述的全文搜索。

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

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

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

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

最佳答案

索引数据库 使用起来非常麻烦,我认为如果不进行一些修改,它就无法满足您的需求。

WebSQL 我将 Chrome WebSql (sqlite) 与全文 (FT3) 结合使用,您可以使用它进行一些高级查询,它会自动对结果进行加权。例如:

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 个单词,它非常快,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 行上它以 50 毫秒出现,这不是很好但可能足以满足您的数据。

关于javascript - 是否有类似 Solr 或 Elasticsearch 的东西只能在 Javascript 中在客户端上使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052135/

相关文章:

javascript - 为 JavaScript 应用程序创建测试数据的最佳方式是什么?

algorithm - 二叉搜索树在现实世界程序中的使用?

javascript - 在 MVC 4 上使用 FineUploader 手动触发上传

javascript - 延迟 Setinterval 函数

c++ - C++中的通用二进制搜索

sql - 复合主键是否也为每一列单独创建索引?

mysql - 关于index和mysql的一般问题

数据库索引 B 树和列表

javascript - 当 child 停止传播时如何监听 child 的事件

algorithm - 遗传算法中的交叉方法