Elasticsearch 入门

简介 为什么要使用Elasticsearch

Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定、 可靠、快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的。

安装
使用测试

image

image

package persist

import (
	"context"
	"errors"
	"log"

	"imooc/craw/engine"

	"gopkg.in/olivere/elastic.v5"
)

func ItemSaver(index string) (chan engine.Item, error) {
	client, err := elastic.NewClient(
		//Must turn off sniff in docker
		elastic.SetSniff(false),
	)
	if err != nil {
		return nil, err
	}

	out := make(chan engine.Item)
	go func() {
		itemCount := 0
		for {
			itemCount++
			item := <-out
			log.Printf("ItemSaver got Item: #%d:%v", itemCount, item)
			err := save(client, index, item)
			if err != nil {
				log.Printf("Item saver :error saving item %v:%v", item, err)
			}

		}
	}()
	return out, nil
}

func save(client *elastic.Client, index string, item engine.Item) error {

	if item.Type == "" {
		return errors.New("must suplly type")
	}
	indexService := client.Index().Index(index).Type(item.Type).BodyJson(item)
	if item.Id != "" {
		indexService.Id(item.Id)
	}
	_, err := indexService.Do(context.Background())
	if err != nil {
		return err
	}
	//fmt.Printf("%+v", resp)
	return nil
}