diff --git a/database.go b/database.go
index 3bcb7c6ae7de8ede2d6a0bb2df5a27c1365c7f66..892de2eb9520d6027f70d1771048e00773638dfd 100644
--- a/database.go
+++ b/database.go
@@ -20,6 +20,7 @@ import (
 	_ "git.autistici.org/ale/liber/Godeps/_workspace/src/github.com/blevesearch/bleve/analysis/analyzers/simple_analyzer"
 	_ "git.autistici.org/ale/liber/Godeps/_workspace/src/github.com/blevesearch/bleve/analysis/analyzers/standard_analyzer"
 	_ "git.autistici.org/ale/liber/Godeps/_workspace/src/github.com/blevesearch/bleve/analysis/token_filters/edge_ngram_filter"
+	blevegoleveldb "git.autistici.org/ale/liber/Godeps/_workspace/src/github.com/blevesearch/bleve/index/store/goleveldb"
 
 	"git.autistici.org/ale/liber/Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb"
 	ldbfilter "git.autistici.org/ale/liber/Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/filter"
@@ -210,10 +211,10 @@ func NewDb(path string) (*Database, error) {
 }
 
 func (db *Database) setupLevelDb(path string) error {
-	// Use 256MB of cache and a small Bloom filter.
+	// Use 128MB of cache and a small Bloom filter.
 	opts := &ldbopt.Options{
 		Filter:             ldbfilter.NewBloomFilter(10),
-		BlockCacheCapacity: 2 << 28,
+		BlockCacheCapacity: 2 << 27,
 	}
 
 	ldb, err := leveldb.OpenFile(path, opts)
@@ -229,7 +230,13 @@ func (db *Database) setupIndex(path string) error {
 	if _, serr := os.Stat(path); serr == nil {
 		db.index, err = bleve.Open(path)
 	} else {
-		db.index, err = bleve.New(path, defaultIndexMapping())
+		// Create a new Bleve index, backed by goleveldb.
+		db.index, err = bleve.NewUsing(path, defaultIndexMapping(), bleve.Config.DefaultIndexType, blevegoleveldb.Name, map[string]interface{}{
+			"create_if_missing":         true,
+			"write_buffer_size":         2 << 25,
+			"lru_cache_capacity":        2 << 27,
+			"bloom_filter_bits_per_key": 10,
+		})
 	}
 	if err != nil {
 		return err