【问题标题】:Indexing file paths or URIs in Lucene在 Lucene 中索引文件路径或 URI
【发布时间】:2011-04-10 22:28:39
【问题描述】:

我在 Lucene 中存储的一些文档具有包含文件路径或 URI 的字段。如果他们的查询词包含路径或 URI 段,我希望用户能够检索这些文档。

例如,如果路径是

C:\home\user\research\whitepapers\analysis\detail.txt

我希望用户能够通过查询path:whitepapers 找到它。

同样,如果 URI 是

http://www.stackoverflow.com/questions/ask

包含uri:questions 的查询将检索它。

我是否需要对这些字段使用特殊的分析器,还是 StandardAnaylzer 可以完成这项工作?我需要对这些字段进行任何预处理吗? (例如用空格替换正斜杠或反斜杠?)

欢迎提出建议!

【问题讨论】:

    标签: indexing lucene lucene.net uri filepath


    【解决方案1】:

    您可以使用标准分析仪。 我通过将以下函数添加到 Lucene 的TestStandardAnalyzer.java 来对此进行了测试:

    public void testBackslashes() throws Exception {
      assertAnalyzesTo(a, "C:\\home\\user\\research\\whitepapers\\analysis\\detail.txt", new String[]{"c","home", "user", "research","whitepapers", "analysis", "detail.txt"});
      assertAnalyzesTo(a, "http://www.stackoverflow.com/questions/ask", new String[]{"http", "www.stackoverflow.com","questions","ask"});
    

    }

    此单元测试使用 Lucene 2.9.1 通过。您可能想在您的特定 Lucene 发行版中尝试它。我想它可以满足您的要求,同时保持域名和文件名不间断。我有没有提到我喜欢单元测试?

    【讨论】:

    • 谢谢!使用 StandardAnalyzer 索引路径段也适用于 Lucene.Net 2.4.0。
    • 您知道开箱即用的 Lucene 分析器可以在“点”处将域名分开或将文件名与其扩展名分开吗?
    • 也许你可以使用带有过滤器的 LetterTokenizer lucene.apache.org/java/2_2_0/api/org/apache/lucene/analysis/…。 LetterTokenizer 按非字母划分文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2013-06-24
    相关资源
    最近更新 更多