Я обрабатываю кучу данных, и я еще не закодировал проверку дубликатов в процессор данных, поэтому я ожидал появления дубликатов.Я запустил следующий SQL-запрос:
SELECT body, COUNT(body) AS dup_count
FROM comments
GROUP BY body
HAVING (COUNT(body) > 1)
И вернул список дубликатов.Глядя на это, я обнаружил, что эти дубликаты имеют несколько хешей.Самая короткая строка комментария "[deleted]"
.Итак, давайте использовать это в качестве примера.В моей базе данных есть девять экземпляров комментария "[deleted]"
, и в моей базе данных получается хэш 1169143752200809218 и 1738115474508091027. 116 найдено 6 раз, а 173 найдено 3 раза.Но когда я запускаю его в IRB, я получаю следующее:
a = '[deleted]'.hash # => 811866697208321010
Вот код, который я использую для создания хэша:
def comment_and_hash(chunk)
comment = chunk.at_xpath('*/span[@class="comment"]').text ##Get Comment##
hash = comment.hash
return comment,hash
end
Я подтвердил, чтоЯ не касаюсь комментариев где-либо еще в моем коде.Вот мой класс datamapper.
class Comment
include DataMapper::Resource
property :uid , Serial
property :author , String
property :date , Date
property :body , Text
property :arank , Float
property :srank , Float
property :parent , Integer #Should Be UID of another comment or blank if parent
property :value , Integer #Hash to prevent duplicates from occurring
end
Правильно ли я считаю, что .hash
в строке будет возвращать одно и то же значение каждый раз, когда она вызывается в одной и той же строке?
Какое значение является правильным, если предположить, что моя строка состоит из "[deleted]"
?
Есть ли способ, которым у меня могут быть разные строки внутри ruby, но SQL увидит их как одну и ту же строку?Кажется, это наиболее правдоподобное объяснение того, почему это происходит, но я действительно стреляю в темноте.