Browse Source

优化搜索

rdluck 4 years ago
parent
commit
33de5a0644
3 changed files with 123 additions and 12 deletions
  1. 14 0
      models/article.go
  2. 108 11
      services/elasticsearch.go
  3. 1 1
      services/task.go

+ 14 - 0
models/article.go

@@ -101,3 +101,17 @@ func ModifyArticleExpert(articleId int, expertNumStr, expertContentStr, intervie
 	_, err = o.Raw(sql, expertContentStr, expertNumStr, interviewDateStr, articleId).Exec()
 	return
 }
+
+type ArticleDetailTest struct {
+	ArticleId            int       `description:"报告id"`
+	Title                string    `description:"标题"`
+	BodyText             string    `description:"内容"`
+	Body                 string    `json:"-" description:"内容"`
+}
+
+func GetArticleDetailTestById(articleId int) (item *ArticleDetailTest, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_article WHERE article_id = ? `
+	err = o.Raw(sql, articleId).QueryRow(&item)
+	return
+}

+ 108 - 11
services/elasticsearch.go

@@ -156,7 +156,7 @@ func (tracelog) Printf(format string, v ...interface{}) {
 	fmt.Printf(format, v...)
 }
 
-func SearchByKeyWord(keyWord string) (result []*models.SearchItem, err error) {
+func SearchByKeyWordBack02(keyWord string) (result []*models.SearchItem, err error) {
 	fmt.Println("keyWord:", keyWord)
 	pageSize := 20
 	keyWordArr, err := GetIndustryMapNameSlice(keyWord)
@@ -470,8 +470,9 @@ func SearchByKeyWordQuery(keyWord string) (result []*models.SearchItem, err erro
 	return
 }
 
-func SearchByKeyWordBack02(keyWord string) (result []*models.SearchItem, err error) {
+func SearchByKeyWord(keyWord string) (result []*models.SearchItem, err error) {
 	fmt.Println("keyWord:", keyWord)
+	keyWord = "医药"
 	pageSize := 20
 	keyWordArr, err := GetIndustryMapNameSlice(keyWord)
 	keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
@@ -492,13 +493,10 @@ func SearchByKeyWordBack02(keyWord string) (result []*models.SearchItem, err err
 		elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
 		elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
 
-	var esIndex = "cygx_article"
+	//var esIndex = "cygx_article"
+	var esIndex = "article_two"
 	searchMap := make(map[int]int)
-	keyWordStr := strings.Join(keyWordArr, ",")
 
-	fmt.Println("keyWordStr ", keyWordStr)
-	keyWordStr = "费用"
-	keyWord=keyWordStr
 	//queryString := elastic.NewQueryStringQuery(`Title:医疗 BodyText:医疗`).Analyzer("ik_smart")
 
 	//queryTeerms:=elastic.NewTermsQuery("Title","医疗","费用")
@@ -507,11 +505,28 @@ func SearchByKeyWordBack02(keyWord string) (result []*models.SearchItem, err err
 	//.Analyzer("ik_smart")
 	//.Analyzer("ik_smart")
 	//boolquery.Must(elastic.NewMatchQuery("Title", keyWord), elastic.NewMatchQuery("BodyText", keyWord))
-	mapping:=client.GetMapping()
-	mapJson,err:=json.Marshal(mapping)
-	utils.FileLog.Info("%s",string(mapJson))
+	mapping := client.GetMapping()
+	mapJson, err := json.Marshal(mapping)
+	utils.FileLog.Info("%s", string(mapJson))
 	boolquery := elastic.NewBoolQuery()
-	boolquery.Must(elastic.NewMatchQuery("Title", keyWord).Boost(2).Analyzer("ik_smart"), elastic.NewMatchQuery("BodyText", keyWord).Boost(1).Analyzer("ik_smart"))
+
+	keyLen := len(keyWordArr)
+	n := float64(keyLen)
+	matchArr := make([]elastic.Query, 0)
+	for _, v := range keyWordArr {
+		if v != "" {
+			matchq1 := elastic.NewMatchQuery("Title", v).Boost(n).Analyzer("ik_smart")
+			matchq2 := elastic.NewMatchQuery("BodyText", v).Boost(n).Analyzer("ik_smart")
+			matchArr = append(matchArr, matchq1)
+			matchArr = append(matchArr, matchq2)
+		}
+		n--
+	}
+	//matchArr=append(matchArr,matchq1)
+	//matchArr=append(matchArr,matchq2)
+
+	boolquery.Should(matchArr...)
+	//boolquery.Must(elastic.NewMatchQuery("BodyText", keyWord).Boost(1).Analyzer("ik_smart"))
 
 	highlight := elastic.NewHighlight()
 	highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
@@ -555,3 +570,85 @@ func SearchByKeyWordBack02(keyWord string) (result []*models.SearchItem, err err
 	}
 	return
 }
+
+func AddMap() {
+	errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
+	file := "./rdlucklog/eslog.log"
+	logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
+
+	client, err := elastic.NewClient(
+		elastic.SetURL(ES_URL),
+		elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
+		elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
+		elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
+	if err != nil {
+		fmt.Println("NewClient Err:", err.Error())
+	}
+
+	bodyJson := `{
+  "mappings": {
+    "properties": {
+      "ArticleId": {
+        "type": "integer"
+      },
+      "Title": {
+        "type": "text",
+        "analyzer": "ik_smart"
+      },
+      "BodyText": {
+        "type": "text",
+        "analyzer": "ik_smart"
+      }
+    }
+  }
+}`
+	//var esMappingIndex = "article_mapping"
+	var esIndex = "article_two"
+
+	exists, err := client.IndexExists(esIndex).Do(context.Background()) //<5>
+	if err != nil {
+		fmt.Println("IndexExists Err:" + err.Error())
+		return
+	}
+	fmt.Println("exists:", exists)
+	if !exists {
+		_, err = client.CreateIndex(esIndex).BodyJson(bodyJson).Do(context.Background())
+		//BodyJson(bodyJson).Do(context.Background())
+		if err != nil {
+			fmt.Println("CreateIndex Err:" + err.Error())
+			return
+		}
+	}
+
+	item, err := models.GetArticleDetailTestById(3584)
+	if err != nil {
+		fmt.Println("GetArticleDetailById Err:" + err.Error())
+		return
+	}
+	content := html.UnescapeString(item.Body)
+	doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
+	if err != nil {
+		fmt.Println("create doc err:", err.Error())
+		return
+	}
+	bodyText := doc.Text()
+	item.BodyText = bodyText
+	//新增
+	resp, err := client.Index().Index(esIndex).Id(strconv.Itoa(item.ArticleId)).BodyJson(item).Do(context.Background())
+	if err != nil {
+		fmt.Println("insert es failed", err.Error())
+		return
+	}
+	fmt.Println(resp)
+	//mappping := make(map[string]interface{})
+	//mappping[esMappingIndex] = bodyJson
+	//putResult,err:=client.PutMapping().Index(esIndex).BodyJson(mappping).Do(context.Background())
+	//mapping,err := client.GetMapping().Index(esIndex).Do(context.Background())
+	//fmt.Println(mapping)
+	//mapJson, err := json.Marshal(mapping)
+	//utils.FileLog.Info("%s", string(mapJson))
+	//fmt.Println(esMappingIndex)
+	//
+	//fmt.Println(err)
+	//fmt.Println(putResult)
+}

+ 1 - 1
services/task.go

@@ -14,6 +14,6 @@ func Task() {
 	//解析报告
 	//GetArticleExpert()
 	//SearchByKeyWordQuery("")
-
+	//AddMap()
 	fmt.Println("end")
 }