備忘録
を参考にしました。
コードは、
と
にあります。
StandardTokenizer
Lucene の StandartAnalyzer
では、StandardTokenizer
という 絵文字など1文字なのに3バイト以上で認識されてしまうものを修正するなどの機能があります。つまり、Lucene で全文検索をする際の最初の前処理をしているところと言ってもいいでしょう。
この StandardTokeniser の初期の設定で、Lucene で 「20%」など「数字%」や「A&E」など「文字列&文字列」が弾かれてしまう仕様になっています。ここでは、これらの「%」や「&」に対する、ミニパッチを紹介します。
ミニパッチを適用するには、Lucene の StandardTokenizerがある場所 から StandardTokenizerImpl.jflex を探します。この JFlex ファイルで、トークナイズのルールが書いてあります。
今回ミニパッチを当てるのは、数字と文字列の部分になるので、その該当箇所は、数字の方は 216行目 の部分で、 文字列の方は 238行目からと244行目からの文字列 になります。
結果だけ載せます。
数字の方は、後ろに \%*
を加えているだけです。
{ExtendNumLetEx}* {NumericEx} ( ( {ExtendNumLetEx}* | {MidNumericEx} ) {NumericEx} )* {ExtendNumLetEx}* \%*
{ return NUMERIC_TYPE; }
文字列の方は、途中に \&*
を加えています。
{ExtendNumLetEx}* ( {KatakanaEx} ( {ExtendNumLetEx}* {KatakanaEx} )*
| ( {HebrewLetterEx} ( {SingleQuoteEx} | {DoubleQuoteEx} {HebrewLetterEx} )
| {NumericEx} ( ( {ExtendNumLetEx}* | {MidNumericEx} ) {NumericEx} )*
| {AHLetterEx} ( ( {ExtendNumLetEx}* | {MidLetterEx} | \&* ) {AHLetterEx} )*
)+
)
({ExtendNumLetEx}+ ( {KatakanaEx} ( {ExtendNumLetEx}* {KatakanaEx} )*
| ( {HebrewLetterEx} ( {SingleQuoteEx} | {DoubleQuoteEx} {HebrewLetterEx} )
| {NumericEx} ( ( {ExtendNumLetEx}* | {MidNumericEx} ) {NumericEx} )*
| {AHLetterEx} ( ( {ExtendNumLetEx}* | {MidLetterEx} | \&* ) {AHLetterEx} )*
)+
)
)*
{ExtendNumLetEx}*
{ return WORD_TYPE; }
StandardTokenizer で直っただけのですが、その後の前処理は試していないので、動かなかったらすみません。