Python 一种在结果集中高效搜索的方法

Python 一种在结果集中高效搜索的方法,python,performance,google-app-engine,search,Python,Performance,Google App Engine,Search,短版 我希望在数据库中的任意对象集中高效地执行全文搜索。所有对象都将在搜索引擎中编制索引 我的想法 我打算把这项工作分成两部分。首先,搜索引擎将查询与全文搜索匹配的加权/排序ID集。这组ID将被过滤,删除不在用户原始集合中的任何ID 有更好的方法吗?如果没有,你能提供一些有效的建议吗 长版本 我正处于构建一个web应用程序的规划阶段,该应用程序将允许用户可视化高度链接的数据集,并操纵这些可视化,以导出感兴趣的顶点集以供进一步分析。用户通过gui执行的过滤操作将非常复杂,并且很难表示为可索引的数量

短版

我希望在数据库中的任意对象集中高效地执行全文搜索。所有对象都将在搜索引擎中编制索引

我的想法

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

有更好的方法吗?如果没有,你能提供一些有效的建议吗

长版本

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

我希望允许用户在这些数据集中对结果执行全文搜索。综上所述,他们简单地将一个早期搜索查询附加到一个新查询以启用“搜索范围”的方法对于我的数据可能不可行

被接受的答案促进了使用数据库操作过滤来自搜索引擎的结果的想法

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

环境详细信息

我正在appengine上运行python 2.7


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

如果您尝试使用GAE数据存储进行分析

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


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

TLDNR:您可以做一些预处理来设置一个大型哈希字典,客户端可以使用它来支持不同的查询吗


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

haha在Southpark参考中。但我保证这不是为了分析。另外,BigQuery看起来是只读的,所以这对我不起作用。数据不会经常更改,但需要更改。缓存中间值以更快地解析关键查询的想法可能是我可以使用的。现在我想起来了,虽然这不是直接分析,但它确实有那种味道@stevep的推荐答案提醒了be.Steve——数据与书签程序获得的数据相似。大量链接项,由单个用户存储在层次结构中,并进行标记。所以会有很多标签,很多文件夹,还有很多项目。你的方法听起来很有趣,我想试着多了解一些。据我所知:数百张照片中有大约300个可能的属性,每个匹配照片的列表都存储为一个字符串数组对象,链接到属性对象。这对我来说可能很有用。如果我将预先计算的标记项关联限制在每个用户范围内,则数据可能足够小,因此无法正常工作。我要测试一下…我希望你是成功的导师。如果您感兴趣,这个SO链接非常好,可以使用JS实现数组交叉。我在用你的保险箱。链接:谢谢,这是一个很好的资源-我几天前就因为这个原因把那个页面加入了书签。