当前位置: 首页 > 知识库问答 >
问题:

在结果集中进行有效搜索的方法

唐裕
2023-03-14

短版本

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

我的主意

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

有没有更好的方法来做这件事?如果没有,你能提供任何关于高效做这件事的建议吗?

长版本

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

我想允许用户在这些数据集中对结果进行全文搜索。看看谷歌在搜索结果集中做了什么,他们简单地将一个早期搜索查询附加到一个新查询以启用“搜索范围”的方法对我的数据可能不可行。

这个问题的公认答案提倡使用数据库操作来过滤来自搜索引擎的结果。

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

环境细节

我正在appengine上运行python 2.7。

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

共有2个答案

贾越
2023-03-14

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

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

郭意
2023-03-14

如果你试图使用GAE数据存储进行分析,你会遇到麻烦。

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

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

 类似资料:
  • 问题内容: 我有一个数据库,其中有75,000+行,每天添加500多个条目。 每行都有标题和描述。 我创建了一个RSS feed,为您提供了特定搜索词的最新条目(例如,http://site.com/rss.rss?q = Pizza将为搜索词“ Pizza”输出RSS)。 我想知道什么是为此编写SQL查询的最佳方法。现在我有: 但是问题是执行查询需要2到10秒。 有没有更好的方法来编写查询,我是

  • 当跨多个索引进行搜索时,elasticsearch的“多重匹配”查询将返回搜索结果中的索引名称。 响应包含字段,该字段告诉结果来自的索引 spring-data-elasticsearch中用于的类是和具有字段、、用于获取与elasticsearch查询相似的数据。但它不包含用于存储字段信息的相关字段。 还支持吗?我需要根据哪个客户端应用程序将生成一些URL发送搜索命中类型(name)。 这是我使

  • 问题内容: 我为此感到挣扎,我觉得应该可以,但是也许我在做一些愚蠢的事情。搜索: 返回Source1和Source2的数据。在下面添加术语搜索,我希望返回仅包含Source1s的第一次搜索的子集。使用第一个查询或单独运行时,不返回任何内容。 我知道很难看到这些文档,但是可以说“ Element.sourceSystem.name”存在并且可以使用,因为第一个搜索可以正常工作-非常感谢所有输入。 问

  • 最近我接受了一次采访,他们问我一个“搜索”问题。问题是: 假设存在一个(正)整数数组,其中每个元素与其相邻元素相比要么是,要么是。 例: 现在搜索并返回其位置。 我给出了这样的答案: 将这些值存储在临时数组中,对它们进行排序,然后应用二进制搜索。 如果找到元素,则返回其在临时数组中的位置 (如果数字出现两次,则返回第一次出现的数字) 但是,他们似乎对这个答案不满意。 正确的答案是什么?

  • 我目前正在参与使用Liferay(6.1 GA2)的项目。Liferay搜索结果似乎提供了指向Web内容片段的链接,而不是指向包含这些片段的页面的链接。 你们中有人经历过这个问题吗?你知道怎么解决吗? 非常感谢朋友们。 最好的,阿尔贝托

  • 本文向大家介绍javascript搜索框效果实现方法,包括了javascript搜索框效果实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript搜索框效果实现方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。