2011-06-28 12 views
1

これは単純なはずですが、LuceneにAND、OR、およびNOTキーワードを無視させる方法を見つけることができません - クエリパーサーは、解析エラーをスローします。私は、単語をnグラムだけでなく単語自体でも検索できるように、検索用語を分割するクエリビルダークラスを用意しています。私はJavaでLuceneを使用しています。それは、それらの論理積を取得するときに、クエリのパーサがエラーをスローLuceneは検索キーワードのキーワードを無視します

name: (ANDERSON COOPER "ANDERSON COOPER")^5 gram4: (ANDE NDER DERS ERSO RSON 
SONC ONCO NCOO COOP OOPE OPER) 

:よう

はそう言って、の検索で、「アンダーソン・クーパーは、」クエリ文字列が見えます。理想的には、パーサーがAND、ORを無視するだけでいいのですが、& &、||、および!を使用します。私がそれらを必要とする場合、それを取得するためにQueryParserクラス自体のコードを変更する必要がありますか?それとも簡単な方法がありますか?また、これが最善の方法である場合はエスケープ文字を挿入することもできますが、単語の前に \を追加しても何もしないようです。

答えて

2

ANDは、"AND"のように引用符で囲むことができます。それは簡単ですか?正規表現は、クエリがどのように見えるかを正確に知っていれば、簡単にそれを行うことができます。

パーサーに問題があってはならないし、PhraseQueryがタームクエリーとして書き直されるため、小さな定数時間のパフォーマンスの差は大きくなります。O(1)です。

正規表現は、おそらく次のようになります、私は必要な正確に何のおかげだ

"$1" 
+0

に置き換えられる

\b(AND|OR|NOT)\b 

を!私は引用符で名前をラップしようとしましたが、それぞれのn-gramも引用符で囲む必要があります。私が望むほど簡単な解決策について。 – danny

関連する問題