diff --git a/kernel/model/search.go b/kernel/model/search.go index ff93044aa..070ba0eac 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -378,7 +378,12 @@ func fullTextSearchCount(query, box, path, filter string) (matchedBlockCount, ma return } - stmt := "SELECT COUNT(id) AS `matches`, COUNT(DISTINCT(root_id)) AS `docs` FROM `blocks_fts` WHERE `blocks_fts` MATCH '" + columnFilter() + ":(" + query + ")' AND type IN " + filter + table := "blocks_fts" // 大小写敏感 + if !Conf.Search.CaseSensitive { + table = "blocks_fts_case_insensitive" + } + + stmt := "SELECT COUNT(id) AS `matches`, COUNT(DISTINCT(root_id)) AS `docs` FROM `" + table + "` WHERE `" + table + "` MATCH '" + columnFilter() + ":(" + query + ")' AND type IN " + filter if "" != box { stmt += " AND box = '" + box + "'" } diff --git a/kernel/sql/block_query.go b/kernel/sql/block_query.go index 8581bfe32..7f3356e28 100644 --- a/kernel/sql/block_query.go +++ b/kernel/sql/block_query.go @@ -502,6 +502,7 @@ func scanBlockRow(row *sql.Row) (ret *Block) { return } ret = &block + putBlockCache(ret) return } diff --git a/kernel/sql/cache.go b/kernel/sql/cache.go index ff1278813..c0cc49e8f 100644 --- a/kernel/sql/cache.go +++ b/kernel/sql/cache.go @@ -23,7 +23,9 @@ import ( "github.com/88250/lute/ast" "github.com/88250/lute/parse" "github.com/dgraph-io/ristretto" + "github.com/jinzhu/copier" gcache "github.com/patrickmn/go-cache" + "github.com/siyuan-note/logging" ) var memCache, _ = ristretto.NewCache(&ristretto.Config{ @@ -50,7 +52,13 @@ func putBlockCache(block *Block) { if disabled { return } - memCache.Set(block.ID, block, 1) + + cloned := &Block{} + if err := copier.Copy(cloned, block); nil != err { + logging.LogErrorf("clone block failed: %v", err) + return + } + memCache.Set(cloned.ID, cloned, 1) } func getBlockCache(id string) (ret *Block) {