我有一个lucene指数约。 100万份文件。从这些文件中,我想了解
我理解理想情况下使用solr,在索引构建期间,它更容易,但是如何从构建的lucene索引中做到这一点?
我正在使用java。对于电子邮件地址搜索,我尝试 .setAllowLeadingWildcard(true),然后搜索 @ 以查找所有电子邮件地址 - 但实际上我没有结果。如果我在卢克搜索 @ ,我得到零结果。如果我在卢克搜索 @ hotmail.com ,我会收到大量有效电子邮件地址的结果,例如aaaaa@hotmail.com。
索引是使用 StandardAnalyzer 创建的。不确定是否重要,但我相信文字是UTF-8。
任何有用的建议,指针都很棒!请注意,这不适用于前端,因此查询不必接近实时。
答案 0 :(得分:1)
分析确实很重要,是的。标准分析器会将空格和标点符号(如@)视为将输入拆分为标记的位置。因此,您不会期望它们中的任何一个实际存在于索引数据中。
您可以使用Lucene的正则表达式查询,尤其是第三种情况。我认为,PhraseQuery似乎适用于第二种,尽管我对你想要在那里实现的目标略微感到困惑。
通常,您可能希望对电子邮件字段使用不同的分析器,以便将其用作单个令牌。您应该在搜索特定电子邮件地址时获得合理的结果,因为尽管分析器会删除标点符号,但是在短语中连续搜索电子邮件的三个(通常)标记可能会获得良好的匹配。但是,像\w*@\w*\.\w*
这样的正则表达式搜索不会特别有效,因为标点符号实际上不会被编入索引和搜索,并且正则表达式搜索不会跨越索引中的多个术语。除了搜索已知的一组电子邮件域或类似的东西之外,您还希望根据您需要搜索它的方式重新编制使用分析的索引,以便按照您的要求进行操作。