引入标签搜索
This commit is contained in:
		
							
								
								
									
										31
									
								
								bin/main.go
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								bin/main.go
									
									
									
									
									
								
							@@ -191,21 +191,11 @@ func main() {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// test ocr
 | 
			
		||||
	//client := gosseract.NewClient()
 | 
			
		||||
	//defer client.Close()
 | 
			
		||||
	//client.SetLanguage("chi_sim")
 | 
			
		||||
	//client.SetImage("/home/stori/webp/data/tt.jpeg")
 | 
			
		||||
	//text, _ := client.Text()
 | 
			
		||||
	//fmt.Println(text)
 | 
			
		||||
	//fmt.Println("=======================================")
 | 
			
		||||
 | 
			
		||||
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
 | 
			
		||||
		w.Write([]byte("Hello World!"))
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// 屏蔽 /favicon.ico
 | 
			
		||||
	http.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
 | 
			
		||||
		http.Error(w, "Not Found", http.StatusNotFound)
 | 
			
		||||
@@ -288,6 +278,27 @@ func main() {
 | 
			
		||||
			return list
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 如果是查询 text, 直接从 Elasticsearch 返回结果
 | 
			
		||||
		if text := QueryConditions("text"); len(text) > 0 {
 | 
			
		||||
 | 
			
		||||
			rest := models.ElasticsearchSearch(strings.Join(text, " "))
 | 
			
		||||
 | 
			
		||||
			// 获取图片列表
 | 
			
		||||
			// 是否有下一页
 | 
			
		||||
			//images.Next = images.Total > images.Page*images.PageSize
 | 
			
		||||
 | 
			
		||||
			// 将对象转换为有缩进的JSON输出
 | 
			
		||||
			data, err := json.MarshalIndent(rest, "", "  ")
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				log.Println("转换图片列表失败", err)
 | 
			
		||||
				http.Error(w, err.Error(), http.StatusBadRequest)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			w.Header().Set("Content-Type", "application/json; charset=UTF-8")
 | 
			
		||||
			w.Write(data)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 拼接查询条件
 | 
			
		||||
		var addCondition = func(conditions *strings.Builder, key, column string) {
 | 
			
		||||
			if values := QueryConditions(key); len(values) > 0 {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@@ -20,6 +20,8 @@ require (
 | 
			
		||||
	github.com/alibabacloud-go/tea-xml v1.1.2 // indirect
 | 
			
		||||
	github.com/aliyun/credentials-go v1.1.2 // indirect
 | 
			
		||||
	github.com/clbanning/mxj/v2 v2.5.6 // indirect
 | 
			
		||||
	github.com/elastic/elastic-transport-go/v8 v8.3.0 // indirect
 | 
			
		||||
	github.com/elastic/go-elasticsearch/v8 v8.11.0 // indirect
 | 
			
		||||
	github.com/fsnotify/fsnotify v1.6.0 // indirect
 | 
			
		||||
	github.com/golang/protobuf v1.5.2 // indirect
 | 
			
		||||
	github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							@@ -85,6 +85,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
 | 
			
		||||
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
 | 
			
		||||
github.com/elastic/elastic-transport-go/v8 v8.3.0 h1:DJGxovyQLXGr62e9nDMPSxRyWION0Bh6d9eCFBriiHo=
 | 
			
		||||
github.com/elastic/elastic-transport-go/v8 v8.3.0/go.mod h1:87Tcz8IVNe6rVSLdBux1o/PEItLtyabHU3naC7IoqKI=
 | 
			
		||||
github.com/elastic/go-elasticsearch/v8 v8.11.0 h1:gUazf443rdYAEAD7JHX5lSXRgTkG4N4IcsV8dcWQPxM=
 | 
			
		||||
github.com/elastic/go-elasticsearch/v8 v8.11.0/go.mod h1:GU1BJHO7WeamP7UhuElYwzzHtvf9SDmeVpSSy9+o6Qg=
 | 
			
		||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 | 
			
		||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 | 
			
		||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										89
									
								
								models/elasticsearch.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								models/elasticsearch.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
package models
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"context"
 | 
			
		||||
	"crypto/tls"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"github.com/elastic/go-elasticsearch/v8"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func elasticsearch_init() (es *elasticsearch.Client) {
 | 
			
		||||
	es, err := elasticsearch.NewClient(elasticsearch.Config{
 | 
			
		||||
		Addresses: []string{
 | 
			
		||||
			Viper.Get("elasticsearch.host").(string),
 | 
			
		||||
		},
 | 
			
		||||
		Username: Viper.Get("elasticsearch.user").(string),
 | 
			
		||||
		Password: Viper.Get("elasticsearch.password").(string),
 | 
			
		||||
		Transport: &http.Transport{
 | 
			
		||||
			TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error creating the client: %s", err)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return es
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ElasticsearchSearch(text string) interface{} {
 | 
			
		||||
	var (
 | 
			
		||||
		r map[string]interface{}
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// 通过字符串构建查询
 | 
			
		||||
	var buf bytes.Buffer
 | 
			
		||||
	query := map[string]interface{}{
 | 
			
		||||
		"query": map[string]interface{}{
 | 
			
		||||
			"match": map[string]interface{}{
 | 
			
		||||
				"content": text,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	if err := json.NewEncoder(&buf).Encode(query); err != nil {
 | 
			
		||||
		log.Fatalf("Error encoding query: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	es := elasticsearch_init()
 | 
			
		||||
 | 
			
		||||
	// Perform the search request.
 | 
			
		||||
	res, err := es.Search(
 | 
			
		||||
		es.Search.WithContext(context.Background()),
 | 
			
		||||
		es.Search.WithIndex("news"),
 | 
			
		||||
		es.Search.WithBody(&buf),
 | 
			
		||||
		es.Search.WithTrackTotalHits(true),
 | 
			
		||||
		es.Search.WithPretty(),
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatalf("Error getting response: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer res.Body.Close()
 | 
			
		||||
 | 
			
		||||
	// Check response status
 | 
			
		||||
	if res.IsError() {
 | 
			
		||||
		log.Fatalf("Error: %s", res.String())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Deserialize the response into a map.
 | 
			
		||||
	if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
 | 
			
		||||
		log.Fatalf("Error parsing the response body: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Print the response status, number of results, and request duration.
 | 
			
		||||
	log.Printf(
 | 
			
		||||
		"[%s] %d hits; took: %dms",
 | 
			
		||||
		res.Status(),
 | 
			
		||||
		int(r["hits"].(map[string]interface{})["total"].(map[string]interface{})["value"].(float64)),
 | 
			
		||||
		int(r["took"].(float64)),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// Print the ID and document source for each hit.
 | 
			
		||||
	for _, hit := range r["hits"].(map[string]interface{})["hits"].([]interface{}) {
 | 
			
		||||
		log.Printf(" * ID=%s, %s", hit.(map[string]interface{})["_id"], hit.(map[string]interface{})["_source"])
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return r
 | 
			
		||||
}
 | 
			
		||||
@@ -20,9 +20,10 @@ func (m *MilvusConnection) Init() (err error) {
 | 
			
		||||
	log.Println("Milvus connection init")
 | 
			
		||||
	host := Viper.Get("milvus.host").(string)
 | 
			
		||||
	port := Viper.Get("milvus.port").(int)
 | 
			
		||||
	address := fmt.Sprintf("%s:%d", host, port)
 | 
			
		||||
	log.Println("Milvus address:", address)
 | 
			
		||||
	m.Client, err = client.NewGrpcClient(context.Background(), address)
 | 
			
		||||
	m.Client, err = client.NewGrpcClient(
 | 
			
		||||
		context.Background(),
 | 
			
		||||
		fmt.Sprintf("%s:%d", host, port),
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Println("Milvus connection failed:", err)
 | 
			
		||||
		return
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user