开始倒是想把 Lucene 改成 Delphi,但是发现不好办,原因就是 Lucene 使用了一个叫
JavaCC 的文法工具 http://www.metamata.com/javacc
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-cooltools.html
JavaCC 能把 BNF 转换成相应的 Java 语法分析类。比如,我们的查询语法的 BNF 是:
* Query ::= ( Clause )*
* Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" )
用 JavaCC 就能生成 7 个 Java 类。这些类负责检验用户输入的语法和分词(Tokenize)。
Lucene 首先操作这些类,看用户输入的内容是否符合规范、做分词,然后再检索。
这么做的好处是定义语法非常方便,并且是的检索语法和检索引擎分离。
但是,因为我们没有 DelphiCC,只能硬改 JavaCC 生成 7 个 Java 类,万一语法变化,
JavaCC 生成新的 7 个 Java 类。所作修改统统作废。所以把它改成 Delphi 的意义不大。
Java 的好处是其核心为 Unicode,因此我们在中文处理上并没有太大的麻烦。
利用 Lucene 的大富翁全文检索可以做成 servlet,也可以做成 SOAP Server,
或者本机的一个 TCP Server/Service。