2017-06-06 41 views
0

ストーリー: トランザクションアイデアのリストを特定のユーザー名クエリ「Peter M *」で検索する必要があります。Lucene 6重複したエントリを避けるには

質問:保存されたtransactionIdsを一意に保つことはどうですか?私は、次の書類を私のインデックスを埋めてきた

Document doc = new Document(); 
doc.add(new StoredField(TRANSACTION_ID, data.getTransactionId())); 
doc.add(new TextField(MARCHANT_NAME, data.getName(), Store.NO)); 

私は新しいエントリを追加するために出回っ2つの戦略(重複エントリを避けるために)を試してみました。

  1. IndexWriter.updateDocumentには、格納するtransactionIdを保持するTermがあります。
  2. 現在のtransactionIdを検索する、それを削除し、それを保存:

答えて

1

あなたはTRANSACTION_IDフィールドにStoredFieldを使用しています。つまり、索引から検索できますが、索引付けされておらず検索できないため、updateDocumentの鍵として使用することはできません。代わりにStringFieldを使用してください。

+0

です。したがって、LongPointを使用することも可能ですか? –

+0

私はそれをお勧めしません。これを行うには 'updateDocument'を避け、代わりにdeleteを実行してから新しい文書を追加します。したがって、' Term'の代わりに削除する文書と照合するために 'Query'を使うことができます。私は通常識別子のために 'LongPoint'のような数値フィールドに対してお勧めします。それがちょうど数字で構成されている識別子の場合は、 'StringField'を使用してください。実際に数値(数値範囲のクエリが便利)ならば、 'LongPoint'が良い選択になります。 – femtoRgon

関連する問題