diff --git a/lib/builder.js b/lib/builder.js
index <HASH>..<HASH> 100644
--- a/lib/builder.js
+++ b/lib/builder.js
@@ -219,9 +219,16 @@ lunr.Builder.prototype.createDocumentVectors = function () {
           tf = termFrequencies[term],
           termIndex = this.invertedIndex[term]._index,
           idf = lunr.idf(this.invertedIndex[term], this.documentCount),
-          score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (documentLength / this.averageDocumentLength)) + tf)
-
-      documentVector.insert(termIndex, score)
+          score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (documentLength / this.averageDocumentLength)) + tf),
+          scoreWithPrecision = Math.round(score * 1000) / 1000
+          // Converts 1.23456789 to 1.234.
+          // Reducing the precision so that the vectors take up less
+          // space when serialised. Doing it now so that they behave
+          // the same before and after serialisation. Also, this is
+          // the fastest approach to reducing a number's precision in
+          // JavaScript.
+
+      documentVector.insert(termIndex, scoreWithPrecision)
     }
 
     documentVectors[docRef] = documentVector
Reduce term score precision in vectors

This change reduces the number of decimal places used to represent the
score of a term within a document vector. Through testing this has been
seen to not have any impact to the relevance of the search results but
does lead to a ~<I>% size reduction when serialising indexes, before and
after compression with gzip.