2009-12-22 4 views
1

Lucene을 사용하여 데이터베이스에서 이름을 검색하려고합니다. 그러나 이름 중 일부는 "NOT"과 "OR"그리고 심지어 "-"마이너스 기호와 같은 단어를 포함합니다. 분석기를 사용하여 이름 안에있는 다른 토큰을 분석하고 용어의 부울 조합으로 검색하려고하지만 Lucene이 연산자로 "NOT"/ "OR"용어를 해석하는 것을 원하지 않습니다 (대신 일반 용어처럼 검색되도록)Lucene 연산자없이 연산자

내가 말하고자하는 바를 달성하는 한 가지 방법은 검색 쿼리에서 분석기를 수동으로 실행 한 다음 모든 결과 토큰을 기반으로 부울 쿼리를 수동으로 생성하는 것입니다. 이것이 최선의 방법입니까? 나는 분석기가 쿼리 파서와 함께 사용되도록 고안되었다는 인상을 받았고, 내가하려는 일을 성취 할 수있는 기본 방법이 있어야한다고 생각한다. 누구든지이 일을하는 가장 좋은 방법을 알고 있습니까?

답변

1

TokenStream에서 BooleanQuery를 구성하는 사용자 고유의 제안 된 방법이 완벽합니다. QueryParser API는 특정 구문을 사용하여 구조화 된 쿼리를 구문 분석하기위한 용도로만 사용됩니다. 쿼리 구문 분석기 구문을 활용하지 않으면 QueryParser를 수동으로 생성 된 BooleanQuery에 사용할 이유가 없습니다.

그러나 StandardAnalyzer (또는 StopFilter가있는 다른 분석기)를 사용하여 필드를 인덱싱하는 경우 "AND", "NOT"및 "OR"과 같은 단어는 인덱싱되지 않으며 검색 할 수 없습니다. 따라서이 경우 정규 표현식을 사용하여 쿼리에서 "-"및 "+"와 같은 연산자와 단어를 쉽게 제거 할 수 있습니다. 그러나 BooleanQuery 접근법을 더 빨리 추천 할 것입니다.