在搜索之前更新Term的值

时间:2012-12-07 15:10:30

标签: lucene

我正在使用Lucene 3.6.1。

您是否知道在Lucene实际执行对持有此术语的文档进行搜索之前是否有办法更改Term的值(Term.text())?

我需要这个预处理,因为在索引中写入时会加密值。我在搜索这个术语时需要进行模糊搜索和/或近似搜索。

最好的问候。

1 个答案:

答案 0 :(得分:1)

您想要在找到之前更改存储在索引中的值吗?不,这没有意义。

如果要存储在索引中加密的数据,则需要使用加密数据进行搜索。如果您需要能够利用正确的文本搜索,您只需要以未加密的形式对其进行索引。除非你使用某种对文本搜索友好的加密形式,否则我猜。我想如果它是一个简单的密码或其他东西,你可以加密索引值和查询并搜索就好了。不过,除此之外,我认为对加密数据采用模糊搜索是不可行的。

我的建议:

您可以索引(但不能存储)未加密的字段形式,以便您根据需要利用搜索功能。

然后可以创建一个字段,存储加密字段以容纳该字段的可检索版本。是否对该字段编制索引取决于在某些情况下是否可以使用加密数据进行搜索,但我猜不会。

类似的东西:

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(以加密形式)。