elasticsearch 移除
This commit is contained in:
		@@ -1,151 +0,0 @@
 | 
			
		||||
package models
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"context"
 | 
			
		||||
	"crypto/tls"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"github.com/elastic/go-elasticsearch/v8"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func elasticsearch_init() (es *elasticsearch.Client) {
 | 
			
		||||
	es, err := elasticsearch.NewClient(elasticsearch.Config{
 | 
			
		||||
		Addresses: []string{config.GetString("elasticsearch.host")},
 | 
			
		||||
		Username:  config.GetString("elasticsearch.user"),
 | 
			
		||||
		Password:  config.GetString("elasticsearch.password"),
 | 
			
		||||
		Transport: &http.Transport{
 | 
			
		||||
			TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error creating the client: %s", err)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return es
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type SearchData struct {
 | 
			
		||||
	_shards struct {
 | 
			
		||||
		failed     int
 | 
			
		||||
		skipped    int
 | 
			
		||||
		successful int
 | 
			
		||||
		total      int
 | 
			
		||||
	}
 | 
			
		||||
	Hits struct {
 | 
			
		||||
		Hits []struct {
 | 
			
		||||
			ID     string  `json:"_id"`
 | 
			
		||||
			Index  string  `json:"_index"`
 | 
			
		||||
			Score  float64 `json:"_score"`
 | 
			
		||||
			Source struct {
 | 
			
		||||
				Content string `json:"content"`
 | 
			
		||||
			} `json:"_source"`
 | 
			
		||||
			Type string `json:"_type"`
 | 
			
		||||
		} `json:"hits"`
 | 
			
		||||
		max_score float64
 | 
			
		||||
		total     struct {
 | 
			
		||||
			relation string
 | 
			
		||||
			value    int
 | 
			
		||||
		}
 | 
			
		||||
	} `json:"hits"`
 | 
			
		||||
	timed_out bool
 | 
			
		||||
	took      int
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 获取搜索结果的 ID 列表
 | 
			
		||||
func (sd SearchData) GetIDList(first, last, after, before int) (id_list []string) {
 | 
			
		||||
	for _, hit := range sd.Hits.Hits {
 | 
			
		||||
		id_list = append(id_list, hit.ID)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 如果 after 不为 0, 从这个ID开始向后取切片
 | 
			
		||||
	if after != 0 {
 | 
			
		||||
		after_str := fmt.Sprint(after)
 | 
			
		||||
		for i, id := range id_list {
 | 
			
		||||
			if id == after_str {
 | 
			
		||||
				id_list = id_list[i+1:]
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 如果 before 不为 0, 从这个ID开始向前取切片
 | 
			
		||||
	if before != 0 {
 | 
			
		||||
		before_str := fmt.Sprint(before)
 | 
			
		||||
		for i, id := range id_list {
 | 
			
		||||
			if id == before_str {
 | 
			
		||||
				id_list = id_list[:i]
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 如果 first 不为 0, 取切片的前 first 个元素
 | 
			
		||||
	if first != 0 {
 | 
			
		||||
		if first > len(id_list) {
 | 
			
		||||
			first = len(id_list)
 | 
			
		||||
		}
 | 
			
		||||
		id_list = id_list[:first]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 如果 last 不为 0, 取切片的后 last 个元素
 | 
			
		||||
	if last != 0 {
 | 
			
		||||
		if last > len(id_list) {
 | 
			
		||||
			last = len(id_list)
 | 
			
		||||
		}
 | 
			
		||||
		id_list = id_list[len(id_list)-last:]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return id_list
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 获取搜索结果的内容列表
 | 
			
		||||
func ElasticsearchSearch(text string) (r SearchData) {
 | 
			
		||||
	// 通过字符串构建查询
 | 
			
		||||
	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.Printf("Error encoding query: %s", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	es := elasticsearch_init()
 | 
			
		||||
 | 
			
		||||
	// 执行查询(最大返回200条)
 | 
			
		||||
	res, err := es.Search(
 | 
			
		||||
		es.Search.WithContext(context.Background()),
 | 
			
		||||
		es.Search.WithIndex("web_images"),
 | 
			
		||||
		es.Search.WithBody(&buf),
 | 
			
		||||
		es.Search.WithTrackTotalHits(true),
 | 
			
		||||
		es.Search.WithPretty(),
 | 
			
		||||
		es.Search.WithSize(200),
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error getting response: %s", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer res.Body.Close()
 | 
			
		||||
 | 
			
		||||
	// 处理错误
 | 
			
		||||
	if res.IsError() {
 | 
			
		||||
		log.Printf("Error: %s", res.String())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 转换返回结果
 | 
			
		||||
	if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
 | 
			
		||||
		log.Printf("Error parsing the response body: %s", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return r
 | 
			
		||||
}
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
package models
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestElasticsearchSearch(t *testing.T) {
 | 
			
		||||
	// 创建一个测试用例
 | 
			
		||||
	expected := "植物学家 阿尔法 可复活一次 技能:召唤豌豆射手 转到设置"
 | 
			
		||||
	actual := ElasticsearchSearch("豌豆")
 | 
			
		||||
 | 
			
		||||
	// 使用 assert 包中的函数来验证函数的输出
 | 
			
		||||
	assert.Equal(t, expected, actual.Hits.Hits[0].Source.Content)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user