【问题标题】:RavenDB. Alternative to leading wildcard?乌鸦数据库。替代前导通配符?
【发布时间】:2013-07-31 07:09:48
【问题描述】:

我有一个包含大约 100 万个文档的 RavenDB 集合。这些文档中的一个字段是包含域名的字符串。我有一个业务需求,让用户通过域的子字符串进行搜索。例如,搜索“example”需要返回域字段包含 example.com、example.net 或 www.example.com 的文档。

另一种标准搜索是通过 .com 之类的域扩展名,它会返回所有 .com 域。

假设句号总是分隔搜索词是不安全的。

我正在从 MS SQL 环境迁移,并试图在没有领先的通配符支持的情况下完成这项工作。我意识到 Raven 可以使用前导通配符,但这样的搜索既昂贵又缓慢。我考虑过该字段的反转版本,但这不符合要求。

NGram 分析器是我的答案吗?如何满足我的搜索要求?

【问题讨论】:

    标签: c# lucene ravendb


    【解决方案1】:

    为了支持带有标记的任意子序列,是的,ngram analyzer 是正确的方法。

    不过,您提供的示例不需要它。索引“www.example.com”应该会产生一个可搜索的标记“example”(例如,标准分析器会),所以在这个例子中根本不需要通配符。

    【讨论】:

      【解决方案2】:

      将字符串存储两次,一次正常,一次反转。 对两者都进行 StartsWith 搜索

      【讨论】:

      • 我想到了,但在 www.example.com 的情况下,当搜索字符串为示例时,这将无济于事。
      猜你喜欢
      • 2013-04-11
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      相关资源
      最近更新 更多