【问题标题】:What is a good Java Library to use for searching through several files for a list of search terms? [closed]什么是用于在多个文件中搜索搜索词列表的好的 Java 库? [关闭]
【发布时间】:2011-06-25 14:23:41
【问题描述】:

基本上,我想做的是在一个文件夹中搜索其子文件夹中的搜索词列表。它不必高度优化或类似的东西。我希望图书馆能够“匹配大小写”、“仅匹配整个单词”等。

我想我可以写这样的东西,打开文件中的每个文件,搜索每个单词,等等,但我真的想要一个捷径。是否有一些图书馆已经完成了大部分工作?

我的梦想代码是这样的:

ArrayList occurrences = SomeLibrary.parse("directoryPath","searchTerm");

有没有接近这个高水平的东西?

谢谢, 格雷

【问题讨论】:

    标签: java search lucene full-text-search search-engine


    【解决方案1】:

    我不建议使用 Lucene(或 Solr)来满足这些要求。

    1. 首先,不需要功能齐全的 text 搜索库(简而言之)使用所有语言知识进行各种魔法来进行非常健壮的文本搜索词干、语法和句法技巧。

    2. 虽然 Lucene 功能强大,但您无法通过 Lucene 的开箱即用功能获得一切。例如,将其配置为查找带有“apple”术语的 apples 相对容易。好的。但是使用相同的配置,它不会在“12345”字符串中找到“123”。忘记像应用程序日志这样的“不可读”文本。 Lucene 是一个类似“google”的引擎,它从人类可读的正确文本中搜索人类的文本。要解决各种“基本”字符串匹配,您需要编写与 Lucene 功能集成的自定义处理代码,这已不再简单。

    使用 Java,编写 BufferedReader 扫描器会更加简单快捷,recursively 会处理文件和文件夹并使用 String.match 搜索完全或部分匹配项。 strong> 和 String.contains 操作。

    【讨论】:

    • 谢谢,听起来不错。我想我很惊讶没有人想出它作为图书馆。
    【解决方案2】:

    您是否考虑过使用 Lucene?它可以根据需要索引和搜索文本文件中的搜索词。集成到您的应用程序中也不难,但不像“ArrayListoccurrences = SomeLibrary.parse("directoryPath","searchTerm");”那么简单:) 我认为您不会找到这么简单的解决方案。

    如果你使用 Lucene,搜索的性能也会很好。

    您可以更进一步并使用 Solr(也是 Apache 产品),但这对您来说可能有点过头了。

    如果您决定研究 Lucene,那么 this 可能会对您有所帮助。

    【讨论】:

    • 我确实看了一下 Lucene,但老实说我有点不知所措。我正在寻找十分钟类型的解决方案。不过,是不是lucene是最简单的,我晚上都得用。
    • 我喜欢你的链接,看起来很简单。
    • Lucene 使用起来非常简单,我目前在一个应用程序中使用它来通过数据库实体进行全文搜索(我实际上是结合使用 Lucene 和 Hibernate Search)。您应该能够很快启动并运行它,如果您需要帮助,请告诉我。
    【解决方案3】:

    我推荐Apache Solr。易于配置,它可以索引数百万个文档。 Solr 对索引和查询进行了所有可能的优化。许多文档。更重要的是,它是开放的。

    【讨论】:

    • Solr 是一个使用 Lucene 的搜索应用,所以我觉得 brent777 后面的回答要好一些。不过,+1 是第一个 :)
    • 每次我想我会是第一个在我打字的时候有人挤进答案,我必须学会更快地打字:(
    【解决方案4】:

    格雷,它是这样的:

    • Lucene 是一个原生 Java 搜索库。它的学习曲线有些陡峭。
    • Solr 是一个使用 Lucene 作为 Web 应用程序构建的搜索引擎。它更容易学习,可以通过 HTTP 接口或称为 Solrj 的 Java 接口使用。

    如果您喜欢最小的 Java 版本,则需要 Lucene。如果您想要最快实施的解决方案,请使用 Solr。这是Solr tutorialLucene tutorial

    这两种方法都需要一个索引阶段和一个稍后的检索阶段。您的问题似乎更像 grep,但我不知道为此匹配的 Java 库。您也没有描述文件类型 - 裸露的 Lucene 可以处理原始文本。您可能需要Apache Tika 才能从您的文件中获取文本和元数据。

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多