2009-04-29 1 views
0

私のデータソースには、スラッシュ、マイナス、プラスなどの多くの特殊文字があります。これらの文字の多くは、luceneに問​​題をもたらします。
そのため、私がインデックスに入れたすべての文字列をエンコードすることに決めました。私のLuceneインデックスのこのエンコーディング戦略が機能しないのはなぜですか?

たとえば、apple/pearはリンゴになります%2Fpear
非常に同じ文字列を検索すると、この文書が返されると思います。

しかし、私は空の手で帰ってきました。何がうまくいかないの?私の周りのいくつかだます後

--EDIT--
(そのことについては、アナライザで)私はStandardAnalyzerとルークで作成するクエリは宇宙で私の%2を変更することに気づきました。したがって結果はありません。どうにかして、queryAnalyzerがこれらを変換しないようにすることはできますか?たぶん私は%XX別のエスケープ方法を使うべきでしょうか?

--More Info--
私は、索引付けおよび問合せの両方にStandardAnalyzerを使用しています。
スペースをエンコードしていません。これが、デフォルトのURLエンコーダを使用する代わりに、自分でエンコードしたエンコードをすばやくロールバックした理由の1つです。 作るりんご/梨りんご梨私の実際のデータでは、必ずしも(inocentを保護するために果物を使用して)とスペースを挿入するときとしないときあまりにも多くのリスク。 Lukeを使用しているフィールドが表示されますappel%2FpearfruitNameの検索:appelが動作します。 fruitNameの検索:appel%2Fpearはありません。fruitName:appel%2fpear

答えて

1

質問するうちにescape special charactersが必要です。特殊文字のリストから、スラッシュがありません。あなたはそのキャラクターを扱う必要はないと思います。

ただし、インデックス作成中に作成されたトークンにもこれらの特殊文字が含まれていることを確認する必要があります。例: "apple/pear"のトークンが1つあります。

+0

私は、Lucene.netのデフォルトのEscape()メソッドがあまり完璧ではないことに気付きました。フォワードスラッシュは間違いなく問題ですが、たとえばエスケープされていません。 –

関連する問題