0

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

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

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

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

NGram 分析器是我的答案吗?我怎样才能满足我的搜索要求?

4

2 回答 2

1

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

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

于 2013-07-31T18:57:48.923 回答
0

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

于 2013-07-31T09:04:56.850 回答