0

アポストロフィが含まれている可能性のあるフィールドがあります。できるようにしたい: 1. 値をそのままインデックスに保存する 2. アポストロフィを無視して値に基づいて検索する。

私は使用を考えています:

   doc.add(new Field("name", value, Store.YES, Index.NO));
   doc.add(new Field("name", value.replaceAll("['‘’`]",""), Store.NO, Index.ANALYZED));

検索時に同じ置換を行うと、それが機能し、クリアされた値を使用してインデックス/検索し、値をそのまま表示する必要があると思います。

ここで他の考慮事項がありませんか?

4

1 に答える 1

0

トークン化レシピをにカプセル化する方がはるかに優れているため、Luceneでは値を直接実行replaceAllすることは悪い習慣Analyzerです。また、ユースケースでフィールドを追加することの利点もわかりません(Document.addを参照)。

元の値を保存し、アポストロフィなしで検索できるようにする場合は、次のようにフィールドを宣言するだけです。

doc.add(new Field("name", value, Store.YES, Index.ANALYZED);

次に、アポストロフィを置き換えるカスタムを接続するだけです(Luceneにはすでにこの変換が含まれているTokenizerと思います)。StandardAnalyzer

ハイライトを使用する目的でフィールドを保存する場合は、の使用も検討する必要がありますField.TermVector.WITH_POSITIONS_OFFSETS

于 2012-07-05T17:37:12.487 に答える