Удаление / Сброс / Очистка фильтра Блума в NodeJS

Я использую фильтр Блума в приложении для поиска дубликатов:

var BloomFilter = require('bloom-filter');

var numberOfElements = 30000;
var falsePositiveRate = 0.005;
var filter = BloomFilter.create(numberOfElements, falsePositiveRate);

var workFunction = function(var1, var2) {


        var bloomData = new Buffer(var1 + var2, "hex");

        if(!filter.contains(bloomData)){

          console.log("In the loop, adding the element to the bloom filter now!");
          filter.insert(bloomData);

         // work with the data and see if I found a needle in the haystack .. if yes, the bloom filter needs a reset !
        if (var === "123") {
          console.log("Needle found, resetting to fresh filter, new round !");
          var filter = BloomFilter.create(numberOfElements, falsePositiveRate);    // WRONG HERE  but you get the idea! 
        }


        } else {
          console.log("This entry is already in the bloom filter !");
        }
}



workFunction("1234", "1234");

После определенного количества раундов я хотел бы сбросить / очистить / обновить фильтр, как вы видите в моем заявлении выше, но это, конечно, не помогает, потому что он все еще используется в тот момент.

Как бы я написал обратный вызов или подобное, чтобы сбросить фильтр?

Спасибо

2 ответа

Похоже, что конкретные модули узла не имеют reset метод или что-нибудь подобное в API.

Кажется, что вы можете сделать 2 вещи на данный момент.

1. Сделайте проблему для этого репо с просьбой о такой функции (или напишите ваш собственный Pull-запрос) https://github.com/jasondavies/bloomfilter.js

2. Измените свое поведение workFunction сбросить фильтр.

var workFunction = function(var1, var2) {
  var filter = BloomFilter.create(numberOfElements, falsePositiveRate);
  // ...
}

Или что-то подобное, чтобы сбросить его самостоятельно.

Ты можешь использовать filter.clear() ( реализовано здесь).

Другие вопросы по тегам