短版
我想在我的数据库中的任意一组对象中有效地执行全文搜索。所有对象都将在搜索引擎中编入索引。
我的想法
我打算将其作为两部分操作。首先,将查询搜索引擎以查找与全文搜索匹配的加权/排序的ID集。这组id将被过滤掉,删除不在用户原始集合中的任何ID。
有更好的方法吗?如果没有,你能否提出有效的建议?
长版
我正处于构建Web应用程序的规划阶段,该应用程序将允许用户可视化高度链接的数据集并操纵这些可视化以派生有趣的顶点集以供进一步分析。用户通过gui执行的过滤操作将很复杂,并且很难表达为可索引的数量。
我想允许用户对这些数据集中的结果执行全文搜索。查看what Google does for searching within a result set,他们只是将早期搜索查询附加到新查询以启用“在内搜索”的方法可能对我的数据不可行。
this question的已接受答案促进了使用数据库操作过滤来自搜索引擎的结果的想法。
作为解决方案的一部分,我还在考虑将前端切换到使用lunr时,用户想要搜索的顶点集足够小,以便前端处理。弄清楚这个限制是什么需要一些测试,但我怀疑它会有几千个,所以对服务器端解决方案的需求仍然存在。
环境详情
我在appengine上运行python 2.7。
在这个应用程序中,我希望初始结果集(将在其中搜索)包含10到2000个顶点。整个数据库中的顶点总数可能要大几个数量级。
答案 0 :(得分:1)
如果您尝试使用GAE数据存储区进行分析,请you are going to have a bad time。
数据存储区查询非常有限,没有对多个属性进行不等式过滤或进行全文搜索。
您可能希望查看具有rich queries并支持正则表达式过滤的Google BigQuery。它还支持"中间表",您可以使用一个查询的结果作为另一个查询的输入数据 - 我不完全掌握您的问题,但似乎这就是您所需要的。
答案 1 :(得分:1)
TLDNR:您是否可以进行一些预处理来设置客户端可用于支持不同查询的大型哈希字典?
您的数据有多大动态和多大?如果您的数据相对静态,我正在研究可能类似的东西。我们有一个网页,允许用户通过选择约300个变量的任意组合来创建AND和OR选择。每个变量都可以包含数百个与之关联的项目。因为变量的数据集是相对静态的而不是巨大的,所以我们在TextProperty字段中将它们创建为json.dumped文本。当浏览器解析时,json只是变成一个由变量id键入的大字典。每个键的值是与所选键相关联的项目数组(在我们的示例中为图像ID)。所有的交叉点和组合都是通过一些小的Javascript函数完成的,这些函数由这些数组提供。这非常有效 - 用户补充了速度,这种方法极大地简化了GAE方面。所有的json变量都是通过crons和taskqueues以一种有点懒惰,接近实时的方式加载/更新的。对于最终显示,结果被格式化并插入到div的innerHTML中。一旦缓存了所有图像,浏览器对格式化和显示数百个420x280像素图像的响应几乎是即时的。非常酷,以及致力于浏览器的人 - 布局和JS优化。 (我应该注意,我们使用纯JS来确保与JQuery之类的开销相比最小的开销。)HTH -stevep