7

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

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

示例:用户想要选择某种水果,并且可以使用水果的许多不同特征来搜索它。她可能会搜索它的名称(苹果)、同一种水果的特殊类型(金黄色的美味)、本地化版本(apfelتفاحpomme),以及其他特征,例如含有水果的食物(pandowdy苹果酒),甚至对其描述进行全文搜索的结果。

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

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

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

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

4

1 回答 1

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

于 2012-06-21T12:14:58.507 回答