2011-03-11 2 views
2

요구 사항이 있지만 구현 세부 사항에 대해 많이 알지 못합니다. >구문 분석기를 작성하여 AST에서 lucene 구문을 구문 분석하는 방법

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

기본적으로 쿼리 문자열 루씬 구문으로 구성되어 있습니다 - 내가 좋아하는 쿼리 문자열이 있습니다. 내가 정말로해야할 것은 쿼리 문자열을 AST로 구문 분석하고 AST를 lucene 쿼리로 변환하는 것입니다.

저는 컴파일러 또는 파서 기술에 익숙하지 않아 아이러니 프로젝트를 만났습니다. 다른 사람이 시작하는 방법과 장소를 알려줄 수 있습니까? 아이러니 나 손으로 만든 것을 사용해도 괜찮습니다.

고마워요.

답변

2

쿼리 문자열이 Lucene 구문 인 경우 Lucene의 QueryParser의 parse (String) 메서드로 전달하면됩니다.

쿼리 문자열을 나타내는 Query 개체를 반환합니다.

표준 lucene 구문을 확장하거나 수정해야하는 경우 JavaCC Grammar for QueryParser부터 시작할 수 있습니다.

기타 후반 응답

+0

lucene의 QueryParser를 알고 있습니다. 사실 내 자신의 구문을 디자인하고 싶지만 구문은 lucene의 쿼리 구문과 거의 같습니다. lucene 구문과 100 % 동일하지는 않습니다. 따라서 오픈 소스 프로젝트의 아이디어 (구현)를 시작하거나 빌려주는 방법을 알아야합니다. – ffmm

3

죄송합니다 add support for RegExps에 과거에 수정 한 :

가 일반적으로 말하는 파서를 생성하기 위해서는 다음 사용하여 파서를 생성, 추상의 문법을 설명하는 것이 가장 좋습니다 파서 생성기.

PEG 문법을 사용하여 lucene-query-parser.js 라이브러리를 만들었습니다.이 라이브러리는 Github repo here에 있습니다. 이 문법은 PEG.js에만 해당하며 JavaScript를 사용하여 구문 분석 된 쿼리에 대해 AST 스타일 결과를 구현합니다.

AST 스타일 구조를 반환 할 필요는 없지만 구문을 작성한 프로젝트에서 가장 유용하다는 것을 알았습니다. 문법을 다시 구현하여 원하는 파서 결과를 반환 할 수 있습니다.

0

Lucene grammar의 JavaScript 파싱 라이브러리 인 Myna parser을 볼 수도 있습니다. Myna 파서는 원하는 형식으로 쉽게 변환 할 수있는 AST를 자동으로 생성합니다.