0

我对检查 在独立桌面应用程序中构建搜索以搜索 db 表以及 office/.pdf 文件感兴趣

这看起来像是 Lucene/examine 的绝佳场景

然而,那里的文档很少,虽然我在 SQL 全文搜索方面有丰富的经验,但 Lucene 完全是一个不同的野兽,因此寻找有关如何/从哪里开始的帮助/指针

是的,我进行了谷歌搜索,但没有找到任何资源,因为这些术语相当普遍(lucene 检查教程等)

4

2 回答 2

3

首先要知道的是 Lucene.NET 是 Lucene 的逐行移植。它只有很小的方面是特定于 .NET 的,因此您会为 Java Lucene 找到的大多数内容也适用于 .NET 版本。对于如何将 Java 项目移植到 .NET 进行热烈讨论,仅此一项就足够了。实际上,经过多年的孵化,该项目刚刚作为一个成熟的 Apache 项目毕业。

现在,我同意 Vedran 的观点,即Lucene in Action这本书是一种真正的享受,不仅可以快速上手(天知道,Lucene 速度很快),还可以深入了解帮助您解决问题的血腥细节。

如果您想从在线材料开始,看起来这个介绍可以帮助您。它已经快 10 年了,但一眼看去,我认为它通常仍然存在。它解决了搜索(索引/查询)的两个方面,同时使用应该可以轻松移植到 C# 的实际 Java 代码来演示它。

总之,这些是亮点

  1. 要写入索引,请使用IndexWriter
  2. 要查询索引,请在IndexSearcher上发布查询
  3. 作者采用一个分析器(默认为 StandardAnalyzer),它定义了如何存储和/或索引文本
  4. 要创建查询,您可以使用QueryParser(它也需要一个 Analyzer),或者自己构建查询对象。

使用此信息,您已经可以设置一个最小的工作示例。

分析仪

下一步是深入研究标记化。不同的分析器进行不同的标记化。它们允许您忽略短词、拆分为非字母数字字符或进行词干提取 (SnowballAnalyzer)。了解哪些分析器可用并选择正确的分析器对于使 Lucene 适合您的问题至关重要。

查询

可以查询索引数据,我会说一种灵活的方式,但有其自身的局限性。由于 Lucene 的性质,诸如求反、排序和范围之类的事情会让您头疼。

您必须意识到的一件事是,Lucene 实际上只不过是一个超高效的字典,您可以使用它进行查找。例如,这解释了为什么否定是奇特的。您不能搜索缺少的东西,但可以搜索“MyField:false”。搜索 1 到 3 之间的数字,通常会创建一个查找 1、2 和 3 的查询。在处理日期时,您必须确保它们以可排序的方式编制索引(例如 20121005)

社区

如果您遇到问题:Lucene.NET 新闻组已经证明非常有用且响应迅速。

SOLR.NET

您可能会遇到一些限制,例如需要刻面。SOLR.NET构建在 Lucene.NET 之上,并解决了一些原本需要您费尽心思的事情。虽然我从来没有真正使用过它。

检查

我也没有使用 Examine 的经验,但从我很快看到的情况来看,它只是减轻了处理查询的负担。

于 2012-10-05T03:34:46.520 回答
1

我曾经需要使用 CLucene,它是 Lucene API 的 C++ 实现。在我遇到Lucene in Action一书之前,这被证明是一项非常艰巨的任务。虽然样本都是Java的,API也有一些差异,但是书里把Lucene中的概念解释的很清楚,所以我只是把这些知识用在了CLucene中。这本书长约 470 页,但你可以通过前三章来完成。

我知道这不是 Lucene/Examine 教程建议,但它确实值得一试,因为 Examine 只是 Lucene 的简单包装。一旦你掌握了这些概念,考试本身就应该变得显而易见。

于 2012-10-01T19:11:34.067 回答