【问题标题】:Text keyword search in 200 or so char text field on database在数据库上的 200 个左右字符文本字段中搜索文本关键字
【发布时间】:2011-03-29 18:44:51
【问题描述】:

情况如下,非常感谢任何人的任何意见:

我有一个大约 100m 行的表格,其中(在其他几个字段中)有一个我们可以称为“产品”的文本字段。产品字段长约 200 个字符,包含产品的详细信息。

我想让用户能够通过输入搜索字符串来搜索这些项目。在最简单的情况下,这可能就足够了,就好像我在我的 sql 中执行“和 where product like '%searchString%'”。

好消息是,尽管有 100m 行,但任何给定用户只对他们自己的行感兴趣,其中行数要少得多,最大的用户可能在表中有 2m 行。

他们的查询还有其他部分,例如“where price > 100 and product like '%searchString%'”。

正在做“喜欢”我最好的选择,或者在 Oracle(我正在使用的数据库)或一些外部索引工具中是否有一些好的工具。我见过提到 Oracle Text,但不太了解。

这个问题比仅仅对出现在产品名称中的所有关键字进行简单的索引要困难一些,因为它们也可能在 SKU 的一部分上进行搜索。所以产品名称可能包含 SKU DFR45G6TY,他们只想输入“DFR”来挑选它,而不必输入完整的 SKU 字符串。 (如果我不得不错过这个功能,它可能仍然可以......)

谁能指出我应该如何解决这个问题的正确方向?资源、技巧、想法、产品,任何感谢您的东西!

谢谢大家!

【问题讨论】:

  • 感谢您的精彩回答,伙计们。我现在正在更彻底地阅读有关 oracle 文本的内容,受到您的回应的鼓舞。看起来它可能正是我所需要的。再次感谢..

标签: sql oracle search text indexing


【解决方案1】:

Oracle Text 确实感觉是正确的方法,尽管一张表中只有 200 个字节可能有点过头了。

如果他们最有可能在产品名称的左侧输入,那么在该字段上使用简单的索引应该没问题。它仍然会带回所有 DFR% 的产品,可能是数万个,但您无法控制它(除了可能警告用户,如果他们输入“短”搜索可能需要一些时间)。

如果 SKU 不在产品字符串的开头,那么您可以在 SKU 而不是整个产品上创建索引。

SUBSTR(product_name,<offset to start of SKU string>

另一方面,如果您需要处理一系列任意搜索,您要么必须将产品名称字符串的所有组件非规范化到另一个表中,要么使用 Oracle Text。

【讨论】:

    【解决方案2】:

    我不会打折 Oracle Text - 阅读各种配置选项,SUBSTRING_INDEX 看起来很有希望 - this page 应该很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2015-09-05
      • 1970-01-01
      相关资源
      最近更新 更多