I metodi tokenizzazione più comuni divisi una determinata stringa su spazi bianchi o non-word . Bloodhound fornisce implementazioni per quei metodi fuori dalla scatola:
// returns ['one', 'two', 'twenty-five']
Bloodhound.tokenizers.whitespace(' one two twenty-five');
// returns ['one', 'two', 'twenty', 'five']
Bloodhound.tokenizers.nonword(' one two twenty-five');
per la query tokenizzazione, probabilmente si vorrà utilizzare uno dei metodi di cui sopra. Per la tokenizzazione dei dati, è qui che potresti voler fare qualcosa di leggermente più avanzato.
Per i riferimenti, a volte si desidera che i token vengano sottoposti a dervying da più di una proprietà. Ad esempio, se si stavano costruendo un motore di ricerca per i repository GitHub, probabilmente sarebbe saggio avere gettoni derivati dal nome, il proprietario del pronti contro termine, e la lingua primaria:
var repos = [
{ name: 'example', owner: 'John Doe', language: 'JavaScript' },
{ name: 'another example', owner: 'Joe Doe', language: 'Scala' }
];
function customTokenizer(datum) {
var nameTokens = Bloodhound.tokenizers.whitespace(datum.name);
var ownerTokens = Bloodhound.tokenizers.whitespace(datum.owner);
var languageTokens = Bloodhound.tokenizers.whitespace(datum.language);
return nameTokens.concat(ownerTokens).concat(languageTokens);
}
Ci possono essere anche lo scenario in cui si vuoi che la tokenizzazione dei dati venga eseguita sul back-end. Il modo migliore per farlo è semplicemente aggiungere una proprietà ai tuoi dati che contiene quei token. È quindi possibile fornire una tokenizzatore che restituisce solo i gettoni già esistenti:
var sports = [
{ value: 'football', tokens: ['football', 'pigskin'] },
{ value: 'basketball', tokens: ['basketball', 'bball'] }
];
function customTokenizer(datum) { return datum.tokens; }
Ci sono molti altri modi si potrebbe andare su creazione di token datum, è in realtà solo dipende da ciò che si sta cercando di realizzare.
Sembra spiacevole che questa informazione non sia stata più facile da trovare dalla documentazione principale.
Questi sono davvero sotto documentati. La mia impressione è che quando un utente fa una query, ad esempio "Cane gatto", la query di spazio biancoTokenizer la divide in spazi vuoti, risultando in una matrice come "[" Cane "," gatto "]'. Quindi, quando arrivano i risultati, il datumTokenizer divide anche quelli. Quindi, se hai un risultato con il nome di una canzone di "Cani e gatti scoppiano", questo verrà diviso in un array. Infine, Bloodhound confronta i due array, e se la totalità dell'array di query si trova nell'array di riferimento, la considera una corrispondenza. Sono sicuro all'80% di questo. – mlissner