lucene을 이용해 검색을 구현할 때, 검색어에 lucene에서 사용하는 특수기호를 넣으면, 잘못 반영 될 소지가 있어, lucene에서 사용하는 특수 기호들에 대해서는 escape(기호 앞에 \를 추가)을 해 줘야 한다.

정규식을 이용해 간단하게 구현했는데, Lucene in Action 책을 보니 sandbox에 있는 js를 참고하라고 해서 홈페이지에 가 보니 없었다.

결국 알고보니 api에 추가가 되었다.
QueryParse.escape();

나 처럼 뻘짓하는 분 없기를...  

but....

http://lucene.apache.org/java/docs/queryparsersyntax.html
여기 가 보면 lucene에서 사용하는 특수기호들에 대한 설명이 나와 있다.
'+ - && || ! ( ) { } [ ] ^ " ~ * ? : \'

그런데 lucene의 escape 코드를 보면 '&&'와 '||'은 빠져 있다.
(2007년 6월 19일 발표된 2.2.0버젼에서 bugfix 되었습니다.)

직관적으로 이해 하겠지만 search value에  &&는 and로 ||는 or로 변환되어 처리되므로,
실제  &&나 ||를 검색해야 하는 경우 코드를 따다 수정해서 사용해야 할 듯.



실제 lucene 코드

+ Recent posts