0

精简版

我想在我的数据库中的任意一组对象中有效地执行全文搜索。所有对象都将在搜索引擎中编入索引。

我的想法

我打算把它变成一个两部分的操作。首先,将向搜索引擎查询与全文搜索匹配的加权/排序的 id 集。这组 id 将被过滤,删除任何不在用户原始集合中的 id。

有一个更好的方法吗?如果没有,您能否就有效地做到这一点提供任何建议?

长版

我正处于构建 Web 应用程序的规划阶段,该应用程序将允许用户可视化高度链接的数据集并操纵这些可视化以派生有趣的顶点集以进行进一步分析。用户通过 gui 执行的过滤操作将很复杂,并且很难表示为可索引的数量。

我想允许用户对这些数据集中的结果执行全文搜索。看看Google 在结果集中搜索所做的工作,他们简单地将较早的搜索查询附加到新查询以启用“搜索范围内”的方法对于我的数据可能不可行。

这个问题的公认答案促进了使用数据库操作来过滤来自搜索引擎的结果的想法。

作为解决方案的一部分,当用户想要在其中搜索的顶点集变得足够小以供前端处理时,我还考虑让前端切换到使用lunr 。弄清楚这个限制是什么需要一些测试,但我怀疑它会是几千个,所以仍然需要一个服务器端解决方案。

环境细节

我在 appengine 上运行 python 2.7。

在这个应用程序中,我希望初始结果集(将在其中搜索)包含 10 到 2000 个顶点。整个数据库中的顶点总数可能会大几个数量级。

4

2 回答 2

1

TLDNR:您能否进行一些预处理来设置客户端可以用来支持不同查询的大型哈希字典?

您的数据有多动态和多庞大?如果您的数据相对静态,我正在研究可能类似的东西。我们的网页允许用户通过选择大约 300 个变量的任意组合来创建 AND 和 OR 选择。每个变量可以有数百个与之关联的项目。因为变量的数据集是相对静态的并且不是巨大的,所以我们将它们创建为 TextProperty 字段中的 json.dumped 文本。当被浏览器解析时,json 简单地变成了一个以变量 ids 为键的大字典。每个键的值都是与所选键关联的项目数组(在我们的例子中是图像 id)。所有的交集和组合都是通过一些小的 Javascript 函数完成的,这些函数由这些数组提供。这非常有效 - 用户补充了速度,而且这种方法非常有效,大大简化了 GAE 方面。所有 json 变量都通过 crons 和任务队列以一种有点懒惰的、近乎实时的方式加载/更新。为了最终显示,结果被格式化并插入到 div 的 innerHTML 中。一旦缓存了所有图像,浏览器对格式化和显示数百个 420x280 像素图像的响应几乎是瞬时的。非常酷,并向从事浏览器工作的人们致敬——包括布局和 JS 优化。(我应该注意,我们使用纯 JS 来确保与 JQuery 之类的东西相比开销最小。) HTH -stevep 格式化和显示数百个 420x280 像素图像的浏览器响应几乎是瞬时的。非常酷,并向从事浏览器工作的人们致敬——包括布局和 JS 优化。(我应该注意,我们使用纯 JS 来确保与 JQuery 之类的东西相比开销最小。) HTH -stevep 格式化和显示数百个 420x280 像素图像的浏览器响应几乎是瞬时的。非常酷,并向从事浏览器工作的人们致敬——包括布局和 JS 优化。(我应该注意,我们使用纯 JS 来确保与 JQuery 之类的东西相比开销最小。) HTH -stevep

于 2013-07-13T19:36:54.830 回答
1

如果您尝试使用 GAE 数据存储进行分析,您将会遇到麻烦

数据存储查询非常有限,没有对多个属性进行不等式过滤或进行全文搜索。

您可能想查看 Google BigQuery,它具有丰富的查询并支持正则表达式过滤。它还支持“中间表”,您可以在其中使用一个查询的结果作为另一个查询的输入数据 - 我不完全理解您的问题,但似乎这就是您所需要的。

于 2013-07-13T09:20:21.650 回答