diff --git a/kernel/api/search.go b/kernel/api/search.go index cebb1016d..0b4feab8e 100644 --- a/kernel/api/search.go +++ b/kernel/api/search.go @@ -365,7 +365,7 @@ func parseSearchAssetContentArgs(arg map[string]interface{}) (page, pageSize int method = int(methodArg.(float64)) } - // orderBy:0:相关度(默认),1:按更新时间升序,2:按更新时间降序 + // orderBy:0:按相关度降序,1:按相关度升序,2:按更新时间升序,3:按更新时间降序 orderByArg := arg["orderBy"] if nil != orderByArg { orderBy = int(orderByArg.(float64)) diff --git a/kernel/model/asset_content.go b/kernel/model/asset_content.go index 6a1e5cd55..0ce0d31a1 100644 --- a/kernel/model/asset_content.go +++ b/kernel/model/asset_content.go @@ -77,7 +77,7 @@ func GetAssetContent(id, query string, queryMethod int) (ret *AssetContent) { // FullTextSearchAssetContent 搜索资源文件内容。 // // method:0:关键字,1:查询语法,2:SQL,3:正则表达式 -// orderBy: 0:相关度(默认),1:按更新时间升序,2:按更新时间降序 +// orderBy: 0:按相关度降序,1:按相关度升序,2:按更新时间升序,3:按更新时间降序 func FullTextSearchAssetContent(query string, types map[string]bool, method, orderBy, page, pageSize int) (ret []*AssetContent, matchedAssetCount, pageCount int) { query = strings.TrimSpace(query) beforeLen := 36 @@ -238,11 +238,20 @@ func buildAssetContentTypeFilter(types map[string]bool) string { var buf bytes.Buffer buf.WriteString("(") - for k, _ := range types { + for k, enabled := range types { + if !enabled { + continue + } + buf.WriteString("'") buf.WriteString(k) buf.WriteString("',") } + if 1 == buf.Len() { + buf.WriteString(")") + return buf.String() + } + buf.Truncate(buf.Len() - 1) buf.WriteString(")") return buf.String() @@ -253,8 +262,10 @@ func buildAssetContentOrderBy(orderBy int) string { case 0: return "ORDER BY rank DESC" case 1: - return "ORDER BY updated ASC" + return "ORDER BY rank ASC" case 2: + return "ORDER BY updated ASC" + case 3: return "ORDER BY updated DESC" default: return "ORDER BY rank DESC" @@ -444,9 +455,12 @@ func copyTempAsset(absPath string) (ret string) { return } + filelock.RWLock.Lock() + defer filelock.RWLock.Unlock() + ret = filepath.Join(dir, gulu.Rand.String(7)+".docx") - if err := filelock.Copy(absPath, ret); nil != err { - logging.LogErrorf("copy [%s] to [%s] failed: [%s]", absPath, ret, err) + if err := gulu.File.Copy(absPath, ret); nil != err { + logging.LogErrorf("copy [src=%s, dest=%s] failed: %s", absPath, ret, err) return } return diff --git a/kernel/model/assets_watcher.go b/kernel/model/assets_watcher.go index d56a81849..18771a62d 100644 --- a/kernel/model/assets_watcher.go +++ b/kernel/model/assets_watcher.go @@ -73,6 +73,11 @@ func watchAssets() { lastEvent = event timer.Reset(time.Millisecond * 100) + + if lastEvent.Op&fsnotify.Rename == fsnotify.Rename { + // 索引资源文件内容 + IndexAssetContent(lastEvent.Name) + } case err, ok := <-assetsWatcher.Errors: if !ok { return