我有一个要求但我对实现细节知之甚少。 我有一个查询字符串,如 - >
(title:java or author:john) and date:[20110303 TO 20110308]
基本上查询字符串由lucene语法组成。 我真正需要做的是将查询字符串解析为AST并将AST转换为lucene查询。
我不熟悉编译器或解析器技术,我遇到了Irony项目。 有人能指出我如何以及从哪里开始?使用反讽或手工制作就可以了。
非常感谢。
答案 0 :(得分:3)
对于迟到的回复感到抱歉:
一般来说,要创建解析器,最好在摘要中描述语法,然后使用解析器生成器生成解析器。
我使用lucene-query-parser.js语法创建了PEG库,该语法位于Github repo here中。该语法特定于PEG.js,并使用JavaScript为解析的查询实现AST样式结果。
没有必要返回AST样式结构,但我发现这对我编写语法的项目最有用。您可以重新实现语法以返回您想要的任何类型的解析器结果。
答案 1 :(得分:2)
如果您的查询字符串是Lucene语法,那么只需将其传递给Lucene的QueryParser的parse(String)方法。
这将返回一个表示查询字符串的Query对象。
如果您需要扩展或修改标准的lucene语法,那么您可以先查看JavaCC Grammar for QueryParser。
其他人已将其修改为add support for RegExps
答案 2 :(得分:0)
您还可以查看Myna parser,它是一个包含示例Lucene grammar的JavaScript解析库。 Myna解析器自动生成一个AST,您可以轻松地将其转换为您想要的任何形式。