Ich stieß auf ein ähnliches Problem, das ich gelöst, indem Hash aller möglichen Werte, die mehr als 3 Buchstaben waren. und erstellt Hash für alle möglichen Kombinationen, können Sie den Wert hinzufügen, der mit pre('save')
festgelegt wird.
In Schema dieser Funktion erstellen:
function createHash(next) {
this.hashes = hash.createHashForField(this.text);
debug(text);
next();
}
mySchema.pre('save', createHash);
Ein Modul für Hashing hash.js
const hash = require('crypto');
const adler32 = require('adler32');
const crypto = require('crypto');
const _ = require('lodash');
adler32.register();
module.exports = Hash = {
/**
* This method creates hash of given text;
* @param text - text to hash;
*/
createHash: (text) => {
return crypto.createHash('adler32').update(text, 'ascii').digest('hex');
},
/**
*
* @param text- text separated by spaces
*/
createHashForText: (text) => {
"use strict";
text= text.toLowerCase();
text= text.trim();
let textSlices = _.flatten(text.split(' ').filter(x => x.length)
.map((part) => {
if (part.length < 3) {
return part;
}
let nameSlices = [];
for (let index = 2; index < part.length; index ++) {
let n = part.slice(0, index+1);
textSlices .push(n);
}
return textSlices ;
}));
return textSlices .map(n => Hash.createHash(n));
}
}
nach, dass Sie alle Ihre Aufzeichnungen wie diese migrieren können: Jetzt
myModel.find({}).then(docs => {
docs.forEach(doc => doc.save().catch(console.log))
})
Wenn Sie suchen, müssen Sie createHash
Funktion verwenden, um zu machen Hash von Keyword und suchen Sie es in Ihrer Datenbank.
Ich hoffe, das hilft.
Nur wenn Sie schwache Verschlüsselung verwenden. Wenn Sie beispielsweise nur Präfix-Übereinstimmungen benötigen, können Sie einen Verschlüsselungsalgorithmus verwenden, der Präfixe beibehält. – CodesInChaos
Es gibt einige ausgefallene durchsuchbare Crypto (z. B. vergessene RAM), aber ich glaube nicht, dass Sie es verwenden möchten. http://outsourcedbits.org/categories/encrypted-search/ – CodesInChaos
@CodesInChaos Jeder Link für Tutorial oder einige Wiki? –