C# 拉文德。前导通配符的替代方案?

C# 拉文德。前导通配符的替代方案?,c#,lucene,ravendb,C#,Lucene,Ravendb,我有一个RavenDB收藏,大约有100万份文件。这些文档中的一个字段是包含域名的字符串。我有一个业务需求,允许用户通过域的子字符串进行搜索。例如,搜索“示例”需要返回域字段包含example.com、example.net或www.example.com的文档 另一个标准的搜索是按域扩展,例如.com,它将返回所有.com域 假设一个句点总是限定一个搜索项是不安全的 我正从MS SQL环境中迁移过来,并试图在不使用通配符支持的情况下完成这项工作。我知道Raven可以使用前导通配符,但这样的搜索

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

另一个标准的搜索是按域扩展,例如.com,它将返回所有.com域

假设一个句点总是限定一个搜索项是不安全的

我正从MS SQL环境中迁移过来,并试图在不使用通配符支持的情况下完成这项工作。我知道Raven可以使用前导通配符,但这样的搜索既昂贵又缓慢。我已经考虑过该领域的反向版本,但这不符合要求


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

将字符串存储两次,一次正常,一次反转。
为了支持带有令牌的任意子序列,在两个

上都进行搜索,是的,这是正确的方法


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

我想到了这一点,但在www.example.com的例子中,当搜索字符串是example时,这不会有帮助。