我正在使用 Lucene 3.6.1。
您知道是否有办法在 Lucene 实际对包含该 Term 的 Document 执行搜索之前更改 Term 的值(Term.text())?
我需要这种预处理,因为值在写入索引时是加密的。我虽然在这个词上搜索时需要做模糊搜索和/或近似搜索。
此致。
我正在使用 Lucene 3.6.1。
您知道是否有办法在 Lucene 实际对包含该 Term 的 Document 执行搜索之前更改 Term 的值(Term.text())?
我需要这种预处理,因为值在写入索引时是加密的。我虽然在这个词上搜索时需要做模糊搜索和/或近似搜索。
此致。
您想在找到之前更改存储在索引中的值吗?不,这没有意义。
如果您在索引中存储加密数据,则需要使用加密数据进行搜索。如果您需要能够利用正确的文本搜索,您只需要以未加密的形式对其进行索引。我猜,除非您使用某种对文本搜索友好的加密形式。我想如果它是一个简单的密码或其他东西,你可以加密索引值和查询和搜索就好了。不过,除此之外,我认为对加密数据进行模糊搜索并不可行。
我的建议:
您可以索引但不能存储字段的未加密形式,让您可以根据需要利用搜索。
然后可以创建一个字段来存储加密字段以容纳该字段的可检索版本。是否索引该字段取决于在某些情况下您是否可以使用加密数据进行搜索,但我猜不会。
就像是:
Document.add(new Field('fieldname', value, Field.Store.NO, Field.Index.ANALYZED);
Document.add(new Field('fieldnameencrypted', value, Field.Store.YES, Field.Index.NO);
只能搜索 fieldname,但只能从找到的文档中检索 fieldnameencrypted(以加密形式)。