2017-06-06 367 views
0

故事: 我需要搜索一個transactionIds列表是一個給定的用戶名查詢,例如「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)); 

我已經嘗試了媒體鏈接兩種策略(避免重複的條目),以添加新條目。

  1. IndexWriter.updateDocument帶有一個Term來存儲transactionId。
  2. 搜索當前的transactionId,刪除它,並將其存儲:

回答

1

您使用的是StoredField爲TRANSACTION_ID領域。這意味着它可以從索引中檢索,但沒有編入索引並且不能被搜索,因此它不能用作updateDocument的關鍵字。改爲使用StringField

+0

我明白了。那麼也可以使用LongPoint? –

+0

我通常不會推薦它。要做到這一點,你想避免'updateDocument',而是做一個刪除,然後添加一個新的文檔,所以你可以使用一個'查詢'來匹配文件刪除,而不是'期限'。我通常建議不要使用數字字段,例如'LongPoint'來標識標識符。如果它是一個恰好由數字組成的標識符,則使用'StringField'。如果它實際上是一個數字(即數字範圍查詢會很有用),那麼「LongPoint」將是一個不錯的選擇。 – femtoRgon