elasticsearch數據庫使用


elasticsearch的一個最為顯著的優點:快速全文檢索。關於elasticsearch 全文檢索的原理,請看:https://blog.csdn.net/wolfcode_cn/article/details/81907195

一、es 安裝

參考官網安裝教程:https://www.elastic.co/guide/en/elasticsearch/reference/6.6/zip-targz.html

教程中介紹了多種操作系統多種安裝方式:

本篇選擇的是linux操作系統下,手動下載安裝包的方式安裝:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz.sha512
shasum -a 512 -c elasticsearch-6.6.2.tar.gz.sha512 
tar -xzf elasticsearch-6.6.2.tar.gz
cd elasticsearch-6.6.2/ 

安裝完畢之后,測試是否成功:

./bin/elasticsearch

此開啟方式是前台開啟,如果要后台運行

./bin/elasticsearch &

curl -X GET "localhost:9200/"

得到下面的信息:

 

 

下面設置在守護進程中運行,開機可以自啟動es:

 

[program:elasticsearch]
command=/home/shippingadmin/elasticsearch-6.6.2/bin/elasticsearch

startsecs=10
autostart=true
autorestart=true
stderr_logfile=/var/log/applogs/elasticsearch.err.log
stdout_logfile=/var/log/applogs/elasticsearch.out.log
user=shippingadmin
stopsignal=INT

 

 

二、es 數據庫操作

引入 nuget 包

Install-Package NEST

連接es代碼:

 public static ElasticClient Client;
        /// <summary>
        /// 初始化es連接
        /// </summary>
        public static void Init()
        {
            //單節點
            var node = new Uri("http://192.168.1.23:8920");
            //指定默認索引是可選的,但如果沒有為給定請求推斷索引,NEST可能會引發異常,這里的默認索引是skuindex
            var settings = new ConnectionSettings(node)
                .DefaultMappingFor<Sku>(m => m.IndexName("skuitem"));

            //使用與群集中的三個Elasticsearch節點的地址對接的SniffingConnectionPool,並且客戶端將使用此類型的池來維護可以以循環方式發送請求的群集中的可用節點列表

            //var uris = new[]
            //{
            //    new Uri("http://localhost:9200"),
            //    new Uri("http://localhost:9201"),
            //    new Uri("http://localhost:9202"),
            //};

            //var connectionPool = new SniffingConnectionPool(uris);
            //var settings = new ConnectionSettings(connectionPool)
            //     .DefaultMappingFor<Sku>(m => m.IndexName("SKU"));

            Client = new ElasticClient(settings);

        

 

創建索引:

/// <summary>
        /// 創建索引,並建立POCO映射關系,這在es第一次插入sku數據時,是必要的,重復插入並不會報錯
        /// </summary>
        /// <returns></returns>
        public static bool CreateIndex()
        {
            var createIndexResponse = Client.CreateIndex("skuitem", c => c
               .Mappings(ms => ms
                   .Map<Sku>(m => m.AutoMap())
               )
            );
            return createIndexResponse.IsValid;
        }

 

定義Entity:

 

 [ElasticsearchType(IdProperty = "Id")]
    public class Sku
    {

        public System.Guid Id { get; set; }

        [Keyword]
        public string Code { get; set; }

        [Keyword]
        public string SerialNumber { get; set; }

        public List<ItemTitle> SearchTitles { get; set; }
    }

    public class ItemTitle
    {
        public Guid Id { get; set; }

        [Keyword]
        public string Title { get; set; }

        [Keyword]
        public string CultureCode { get; set; }
    }

插入數據,並做查詢:

 static void Main(string[] args)
        {

            SkuManager.Init();

            SkuManager.CreateIndex();

            List<Sku> skus = new List<Sku>()
            {
                new Sku()
                {
                    Id=Guid.NewGuid(),
                    Code="sku1",
                    SerialNumber="abc1234",
                    SearchTitles=new List<ItemTitle>()
                    {
                        new ItemTitle()
                        {
                            Id=Guid.NewGuid(),
                            CultureCode="cn",
                            Title="ddkdkdkdkdkdkdk",
                        },
                         new ItemTitle()
                        {
                            Id=Guid.NewGuid(),
                            CultureCode="en",
                            Title="ddkdkdkdkdkdkdk",
                        }
                    }
                },
                new Sku()
                {
                    Id=Guid.NewGuid(),
                    Code="sku2",
                    SerialNumber="abc1dddfd234",
                    SearchTitles=new List<ItemTitle>()
                    {
                        new ItemTitle()
                        {
                            Id=Guid.NewGuid(),
                            CultureCode="cn",
                            Title="ddkdkdkdkdkdksdfsdk",
                        },
                         new ItemTitle()
                        {
                            Id=Guid.NewGuid(),
                            CultureCode="en",
                            Title="ddkdkdksdfdkdkdkdk",
                        }
                    }
                }
            };

            var indexResult = SkuManager.Client.IndexMany<Sku>(skus);

            var searchResult1 = SkuManager.Client.Search<Sku>(s => s
                .From(0)
                .Size(5)
                .Query(q => q
                    .Match(m => m
                        .Field(f => f.SerialNumber)
                        .Query("fd")
                               )
                          )
                 );





            var query = new List<Func<QueryContainerDescriptor<Sku>, QueryContainer>>();
            query.Add(sku => sku.Wildcard(tm => tm.Field(f => f.SerialNumber).Value("*fd*")));
            query.Add(sku => sku.Term(tm => tm.Field(f => f.Code).Value("sku2")));

            var searchResult2 = SkuManager.Client.Search<Sku>(s => s
                    .Query(q => q.Bool(b => b.Must(query))
                )
            ).Documents.ToList();

        }

 

總結:1.es是用java代碼編寫的數據存儲以及提供了豐富的數據操作API,所以在windows或者linux安裝es之前,是需要先安裝java sdk,並設置環境變量;關於環境變量的文章請參考:

             https://www.cnblogs.com/jasonzeng/p/8302171.html

            https://blog.csdn.net/u012498149/article/details/78771729

           2.es相對應的客戶端是 kibana,提供了強大的數據查詢,圖表,統計等功能,后面可能要針對 kibana作一次學習總結;

           3.現在es最新版本,7.x已經出來,安裝完之后,用elasticsearch.net,是不兼容的,因為elasticsearch.net,只支持到 6.x版本;

           4.關於elasticsearch.net,更多的數據庫操作,請看官網,其中有low lever client, high lever client, 本篇用的是high level client:  https://www.elastic.co/guide/en/elasticsearch/client/net-api/6.x/nest.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM