2011-03-11 101 views
2

我有一個需求,但我對實現細節知之甚少。 我有一個查詢字符串喜歡 - >如何構建解析器來將lucene語法解析爲AST

(title:java or author:john) and date:[20110303 TO 20110308] 

基本的查詢字符串由使用Lucene語法。 我真正需要做的是將查詢字符串解析爲AST並將AST轉換爲lucene查詢。

我不熟悉編譯器或解析器技術,我遇到了Irony項目。 有人能指點我如何以及從哪裏開始?使用反諷或手工製作可以。

非常感謝。

回答

2

如果您的查詢字符串是Lucene語法,那麼只需將它傳遞給Lucene的QueryParser的parse(String)方法即可。

這將返回一個表示查詢字符串的查詢對象。

如果您需要擴展或修改標準lucene語法,那麼您可以先查看JavaCC Grammar for QueryParser

其他人在過去修改它add support for RegExps

+0

我知道lucene的QueryParser。我實際上想設計自己的語法,但語法與lucene的查詢語法非常相似。與lucene的語法不完全相同。所以我需要知道如何開始或借鑑任何現有的開源項目的想法(實現)來實現它。 – ffmm 2011-03-11 16:00:11

3

對不起,我遲到的迴應:

一般而言,創建一個解析器,這是最好的描述語法抽象,然後使用生成的解析器一個解析器生成器。

我使用PEG語法創建了lucene-query-parser.js庫,該語法位於Github repo here中。該語法特定於PEG.js,並使用JavaScript爲解析的查詢實現AST樣式結果。

沒有必要返回AST風格的結構,但我發現對於我爲其編寫語法的項目最爲有用。您可以重新實現語法以返回您想要的任何類型的解析器結果。

0

您還可以查看Myna parser這是一個JavaScript解析庫,其中包含樣本Lucene grammar。 Myna解析器自動生成一個AST,你可以很容易地轉換成你想要的任何形式。