Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于6亿个句子的Java哈希字符串_Java_Hash - Fatal编程技术网

用于6亿个句子的Java哈希字符串

用于6亿个句子的Java哈希字符串,java,hash,Java,Hash,我想检查6亿个阿拉伯语句子的精确副本(每个句子少于150个字符)。所以,我用Lucene索引了文本和它们的哈希。 我确实对文本进行了如下散列: MessageDigest digester = MessageDigest.getInstance("SHA-256"); digester.update(sentence.getBytes()); int hashValue = new String(digester.digest()).hashCode(); 我的索引包含以下字段: text:

我想检查6亿个阿拉伯语句子的精确副本(每个句子少于150个字符)。所以,我用Lucene索引了文本和它们的哈希。 我确实对文本进行了如下散列:

MessageDigest digester = MessageDigest.getInstance("SHA-256");
digester.update(sentence.getBytes());
int hashValue = new String(digester.digest()).hashCode();
我的索引包含以下字段:

text: <sentence>
hash: <hashValue>
问题是,当我这样做的时候,我得到的是同一个散列的不同句子!所以,我没能实现我想要的

所以我想得到以下问题的答案:

  • 如果我使用这个哈希函数对单词而不是句子进行哈希运算,冲突会减少吗
  • 是否有一个集合更少的更好的哈希函数
  • 有没有更好的方法来完成我的任务
  • 即使散列函数使用字节,散列语言是否依赖于字节,因此它们是否是utf-8文本的更好散列
我感谢你的回答! 当做
Reem

如果您使用Lucene为它们编制索引,则实际上不需要哈希。只需将句子存储为(未分类)
StringField
,并使用
TermQuery
来查询准确的句子。

“我用相同的散列得到不同的句子”是的!!哈希不能保证是唯一的。它们不能是唯一的。散列是一个int,所以它的值是finiteA。只要正确处理,散列冲突本身并不一定是坏的。你目前是如何解决冲突的?@Tim Biegeleisen我没有处理冲突,这就是为什么我发布这个问题来解决这个问题的原因。@Andreas那么,有没有一个好方法来实现我想要的?我存储哈希是因为我在比较字符串之前对字符串进行了一些处理(例如,删除URL)因为我想比较没有URL的文本,但最终我需要原始文本用于其他目的。然后我会索引和搜索处理过的文本(而不是散列)。您可以将原始句子存储在
StoredField
中。也不需要编制索引。请看更多关于空间优化的内容!
ScoreDoc[] results;
TopScoreDocCollector collector = TopScoreDocCollector.create(1000);
Query rangeQuery = LegacyNumericRangeQuery.newIntRange("hash", hashValue, hashValue, true, true);
searcher.search(rangeQuery, collector);
results = collector.topDocs().scoreDocs;