go es 某一部分的代码

package elasticSearch

import (
	"CommentDesign/model"
	"context"
	"fmt"
	"github.com/olivere/elastic/v7"
	"log"
	"os"
	"time"
)



//todo  input: contextId :keyword      content:text类型     authorId:keyword类型   creatAt:date


//TODO 这里面还要存一下 commentId replyID

var mapping = `
{
	"settings":{
		"number_of_shards": 1,
		"number_of_replicas": 0
	},
	"mappings":{
		"properties":{
			"commentOrReplyId":{
				"type":"keyword"
			},
			"contextId":{
				"type":"keyword"
			},
			"content":{
				"type":"text"
			},
			"authorId":{
				"type":"keyword"
			},
			"creatAt":{
				"type":"date"
			},
			"belongTo":{
				"type":"keyword"
			}
		}
	}
	
}`
var index string


//index = "contextId:0"
//todo  这个check索引是非常必要的  有索引的话 我为什么要新建一个索引  呢  这个就好奇怪呀
func buildMappingConstraint(ctx context.Context,client *elastic.Client,contextId string) error{
	index = "contextid"+contextId

	// Use the IndexExists service to check if a specified index exists.
	exists, err := client.IndexExists(index).Do(ctx)
	if err != nil {
		// Handle error
		panic(err)
		return err
	}
	//if index does not exist, create a new one with the specified mapping
	if !exists {
		createIndex, err := client.CreateIndex(index).BodyString(mapping).Do(ctx)
		if err != nil {
			panic(err)
			return err
		}
		if !createIndex.Acknowledged {
			log.Println(createIndex)
		} else {
			log.Println("successfully created index")
		}
	} else {
		log.Println("Index already exist")
	}
	return nil
}

func DeliverToEsNormalComment(commentId string,contextId string,content string,authorId string)error{
	client, err := elastic.NewClient(
		// elasticsearch 服务地址,多个服务地址使用逗号分隔
		elastic.SetURL("http://127.0.0.1:9200"),
		// 基于http base auth验证机制的账号和密码
		//elastic.SetBasicAuth("user", "secret"),
		// 启用gzip压缩
		//elastic.SetGzip(true),
		// 设置监控检查时间间隔
		elastic.SetHealthcheckInterval(10*time.Second),
		// 设置请求失败最大重试次数
		elastic.SetMaxRetries(5),
		// 设置错误日志输出
		elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
		// 设置info日志输出
		elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)))
	if err != nil {
		// Handle error
		fmt.Printf("连接失败: %v\n", err)
	} else {
		fmt.Println("连接成功")
	}

	ctx := context.Background()

	// 定义一篇博客
	err=buildMappingConstraint(ctx,client,contextId)
	if err!=nil{
		return err
	}
	//todo  input: contextId :keyword  commentID (这个要从sql型数据库里面获取了吧)    content:text类型   documentId(自动生成哈)  authorId:keyword类型   creatAt:date
	////这个后面就是建立这个index  的document啥的
	//这里面要存一下paperId吧  不然你怎么获得详细的信息呢
	//TODO  这里面要传入 commentId 吧  因为后面 会根据commentId 来获得这个评论的详细信息
	//TODO 这个commentId 就这样用了  就是不要改变一下表结构
	//commentId:="1"

	//"properties":{
	//	"commentOrReplyId":{
	//		"type":"keyword"
	//	},
	//	"contextId":{
	//		"type":"keyword"
	//	},
	//	"content":{
	//		"type":"text"
	//	},
	//	"authorId":{
	//		"type":"keyword"
	//	},
	//	"creatAt":{
	//		"type":"date"
	//	},
	//	"belongTo":{
	//		"type":"keyword"
	//	}
	comment:=model.CommentESModified{
		CommentOrReplyId: commentId,
		ContextId:contextId,
		Content:   content ,
		AuthorId:  authorId,
		BelongTo:"normalComment",
		CreatAt:   time.Now(),
	}

	//todo 感觉这个contextId这个字段都没什么用

	//  把这个commentId  当成documentId呗  就是 别用ES再去自动生成 documentId了 能区分就好了呗
	documentId:=commentId
	//todo  终于不用担心documentId的问题了
	put1, err := client.Index().
		Index(index). // 设置索引名称
		Id(documentId). // 设置文档id todo 这个如何自动设置文档的id
		BodyJson(comment). // 指定前面声明struct对象
		Do(ctx) // 执行请求,需要传入一个上下文对象
	//Id("1"). // 设置文档id
	//put1, err := client.Index().
	//	Index(index). // 设置索引名称
	//	BodyJson(comment). // 指定前面声明struct对象
	//	Do(ctx) // 执行请求,需要传入一个上下文对象
	if err != nil {
		// Handle error
		panic(err)
		return err
	}
	fmt.Println(put1)
	return nil

}





func DeliverToEsReply(commentId string,contextId string,content string,authorId string)error{
	client, err := elastic.NewClient(
		// elasticsearch 服务地址,多个服务地址使用逗号分隔
		elastic.SetURL("http://127.0.0.1:9200"),
		// 基于http base auth验证机制的账号和密码
		//elastic.SetBasicAuth("user", "secret"),
		// 启用gzip压缩
		//elastic.SetGzip(true),
		// 设置监控检查时间间隔
		elastic.SetHealthcheckInterval(10*time.Second),
		// 设置请求失败最大重试次数
		elastic.SetMaxRetries(5),
		// 设置错误日志输出
		elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
		// 设置info日志输出
		elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)))
	if err != nil {
		// Handle error
		fmt.Printf("连接失败: %v\n", err)
	} else {
		fmt.Println("连接成功")
	}

	ctx := context.Background()

	// 定义一篇博客
	err=buildMappingConstraint(ctx,client,contextId)
	if err!=nil{
		return err
	}
	//todo  input: contextId :keyword  commentID (这个要从sql型数据库里面获取了吧)    content:text类型   documentId(自动生成哈)  authorId:keyword类型   creatAt:date
	////这个后面就是建立这个index  的document啥的
	//这里面要存一下paperId吧  不然你怎么获得详细的信息呢
	//TODO  这里面要传入 commentId 吧  因为后面 会根据commentId 来获得这个评论的详细信息
	//TODO 这个commentId 就这样用了  就是不要改变一下表结构
	//commentId:="1"

	//"properties":{
	//	"commentOrReplyId":{
	//		"type":"keyword"
	//	},
	//	"contextId":{
	//		"type":"keyword"
	//	},
	//	"content":{
	//		"type":"text"
	//	},
	//	"authorId":{
	//		"type":"keyword"
	//	},
	//	"creatAt":{
	//		"type":"date"
	//	},
	//	"belongTo":{
	//		"type":"keyword"
	//	}
	comment:=model.CommentESModified{
		CommentOrReplyId: commentId,
		ContextId:contextId,
		Content:   content ,
		AuthorId:  authorId,
		BelongTo:"reply",
		CreatAt:   time.Now(),
	}

	//todo 感觉这个contextId这个字段都没什么用

	//  把这个commentId  当成documentId呗  就是 别用ES再去自动生成 documentId了 能区分就好了呗
	documentId:=commentId
	//todo  终于不用担心documentId的问题了
	put1, err := client.Index().
		Index(index). // 设置索引名称
		Id(documentId). // 设置文档id todo 这个如何自动设置文档的id
		BodyJson(comment). // 指定前面声明struct对象
		Do(ctx) // 执行请求,需要传入一个上下文对象
	//Id("1"). // 设置文档id
	//put1, err := client.Index().
	//	Index(index). // 设置索引名称
	//	BodyJson(comment). // 指定前面声明struct对象
	//	Do(ctx) // 执行请求,需要传入一个上下文对象
	if err != nil {
		// Handle error
		panic(err)
		return err
	}
	fmt.Println(put1)
	return nil

}







//fmt.Printf("文档Id %s, 索引名 %s\n", put1.Id, put1.Index)
//"content":{
//	"type":"text"
//},
//"authorId":{
//	"type":"keyword"
//},
//"creatAt":{
//	"type":"date"
//}
//comment := Article{"commentId":1, "content":"go如何操作ES", "authorId":"tizi", creatAt:time.Now()}
//// 使用client创建一个新的文档
//"contextId":{
//	"type":"keyword"
//},
package elasticSearch

import (
   "CommentDesign/model"
   "context"
   "fmt"
   "github.com/olivere/elastic/v7"
   "log"
   "os"
   "time"
)



//todo  input: contextId :keyword      content:text类型     authorId:keyword类型   creatAt:date


//TODO 这里面还要存一下 commentId replyID

var mapping = `
{
   "settings":{
      "number_of_shards": 1,
      "number_of_replicas": 0
   },
   "mappings":{
      "properties":{
         "commentOrReplyId":{
            "type":"keyword"
         },
         "contextId":{
            "type":"keyword"
         },
         "content":{
            "type":"text"
         },
         "authorId":{
            "type":"keyword"
         },
         "creatAt":{
            "type":"date"
         },
         "belongTo":{
            "type":"keyword"
         }
      }
   }
   
}`
var index string


//index = "contextId:0"
//todo  这个check索引是非常必要的  有索引的话 我为什么要新建一个索引  呢  这个就好奇怪呀
func buildMappingConstraint(ctx context.Context,client *elastic.Client,contextId string) error{
   index = "contextid"+contextId

   // Use the IndexExists service to check if a specified index exists.
   exists, err := client.IndexExists(index).Do(ctx)
   if err != nil {
      // Handle error
      panic(err)
      return err
   }
   //if index does not exist, create a new one with the specified mapping
   if !exists {
      createIndex, err := client.CreateIndex(index).BodyString(mapping).Do(ctx)
      if err != nil {
         panic(err)
         return err
      }
      if !createIndex.Acknowledged {
         log.Println(createIndex)
      } else {
         log.Println("successfully created index")
      }
   } else {
      log.Println("Index already exist")
   }
   return nil
}

func DeliverToEsNormalComment(commentId string,contextId string,content string,authorId string)error{
   client, err := elastic.NewClient(
      // elasticsearch 服务地址,多个服务地址使用逗号分隔
      elastic.SetURL("http://127.0.0.1:9200"),
      // 基于http base auth验证机制的账号和密码
      //elastic.SetBasicAuth("user", "secret"),
      // 启用gzip压缩
      //elastic.SetGzip(true),
      // 设置监控检查时间间隔
      elastic.SetHealthcheckInterval(10*time.Second),
      // 设置请求失败最大重试次数
      elastic.SetMaxRetries(5),
      // 设置错误日志输出
      elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
      // 设置info日志输出
      elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)))
   if err != nil {
      // Handle error
      fmt.Printf("连接失败: %v\n", err)
   } else {
      fmt.Println("连接成功")
   }

   ctx := context.Background()

   // 定义一篇博客
   err=buildMappingConstraint(ctx,client,contextId)
   if err!=nil{
      return err
   }
   //todo  input: contextId :keyword  commentID (这个要从sql型数据库里面获取了吧)    content:text类型   documentId(自动生成哈)  authorId:keyword类型   creatAt:date
   ////这个后面就是建立这个index  的document啥的
   //这里面要存一下paperId吧  不然你怎么获得详细的信息呢
   //TODO  这里面要传入 commentId 吧  因为后面 会根据commentId 来获得这个评论的详细信息
   //TODO 这个commentId 就这样用了  就是不要改变一下表结构
   //commentId:="1"

   //"properties":{
   // "commentOrReplyId":{
   //    "type":"keyword"
   // },
   // "contextId":{
   //    "type":"keyword"
   // },
   // "content":{
   //    "type":"text"
   // },
   // "authorId":{
   //    "type":"keyword"
   // },
   // "creatAt":{
   //    "type":"date"
   // },
   // "belongTo":{
   //    "type":"keyword"
   // }
   comment:=model.CommentESModified{
      CommentOrReplyId: commentId,
      ContextId:contextId,
      Content:   content ,
      AuthorId:  authorId,
      BelongTo:"normalComment",
      CreatAt:   time.Now(),
   }

   //todo 感觉这个contextId这个字段都没什么用

   //  把这个commentId  当成documentId呗  就是 别用ES再去自动生成 documentId了 能区分就好了呗
   documentId:=commentId
   //todo  终于不用担心documentId的问题了
   put1, err := client.Index().
      Index(index). // 设置索引名称
      Id(documentId). // 设置文档id todo 这个如何自动设置文档的id
      BodyJson(comment). // 指定前面声明struct对象
      Do(ctx) // 执行请求,需要传入一个上下文对象
   //Id("1"). // 设置文档id
   //put1, err := client.Index().
   // Index(index). // 设置索引名称
   // BodyJson(comment). // 指定前面声明struct对象
   // Do(ctx) // 执行请求,需要传入一个上下文对象
   if err != nil {
      // Handle error
      panic(err)
      return err
   }
   fmt.Println(put1)
   return nil

}





func DeliverToEsReply(commentId string,contextId string,content string,authorId string)error{
   client, err := elastic.NewClient(
      // elasticsearch 服务地址,多个服务地址使用逗号分隔
      elastic.SetURL("http://127.0.0.1:9200"),
      // 基于http base auth验证机制的账号和密码
      //elastic.SetBasicAuth("user", "secret"),
      // 启用gzip压缩
      //elastic.SetGzip(true),
      // 设置监控检查时间间隔
      elastic.SetHealthcheckInterval(10*time.Second),
      // 设置请求失败最大重试次数
      elastic.SetMaxRetries(5),
      // 设置错误日志输出
      elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
      // 设置info日志输出
      elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)))
   if err != nil {
      // Handle error
      fmt.Printf("连接失败: %v\n", err)
   } else {
      fmt.Println("连接成功")
   }

   ctx := context.Background()

   // 定义一篇博客
   err=buildMappingConstraint(ctx,client,contextId)
   if err!=nil{
      return err
   }
   //todo  input: contextId :keyword  commentID (这个要从sql型数据库里面获取了吧)    content:text类型   documentId(自动生成哈)  authorId:keyword类型   creatAt:date
   ////这个后面就是建立这个index  的document啥的
   //这里面要存一下paperId吧  不然你怎么获得详细的信息呢
   //TODO  这里面要传入 commentId 吧  因为后面 会根据commentId 来获得这个评论的详细信息
   //TODO 这个commentId 就这样用了  就是不要改变一下表结构
   //commentId:="1"

   //"properties":{
   // "commentOrReplyId":{
   //    "type":"keyword"
   // },
   // "contextId":{
   //    "type":"keyword"
   // },
   // "content":{
   //    "type":"text"
   // },
   // "authorId":{
   //    "type":"keyword"
   // },
   // "creatAt":{
   //    "type":"date"
   // },
   // "belongTo":{
   //    "type":"keyword"
   // }
   comment:=model.CommentESModified{
      CommentOrReplyId: commentId,
      ContextId:contextId,
      Content:   content ,
      AuthorId:  authorId,
      BelongTo:"reply",
      CreatAt:   time.Now(),
   }

   //todo 感觉这个contextId这个字段都没什么用

   //  把这个commentId  当成documentId呗  就是 别用ES再去自动生成 documentId了 能区分就好了呗
   documentId:=commentId
   //todo  终于不用担心documentId的问题了
   put1, err := client.Index().
      Index(index). // 设置索引名称
      Id(documentId). // 设置文档id todo 这个如何自动设置文档的id
      BodyJson(comment). // 指定前面声明struct对象
      Do(ctx) // 执行请求,需要传入一个上下文对象
   //Id("1"). // 设置文档id
   //put1, err := client.Index().
   // Index(index). // 设置索引名称
   // BodyJson(comment). // 指定前面声明struct对象
   // Do(ctx) // 执行请求,需要传入一个上下文对象
   if err != nil {
      // Handle error
      panic(err)
      return err
   }
   fmt.Println(put1)
   return nil

}







//fmt.Printf("文档Id %s, 索引名 %s\n", put1.Id, put1.Index)
//"content":{
// "type":"text"
//},
//"authorId":{
// "type":"keyword"
//},
//"creatAt":{
// "type":"date"
//}
//comment := Article{"commentId":1, "content":"go如何操作ES", "authorId":"tizi", creatAt:time.Now()}
//// 使用client创建一个新的文档
//"contextId":{
// "type":"keyword"
//},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qqqweiweiqq

你的鼓励将是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值