简介 ElasticSearch

ElasticSearch 一般用于分词,订单查询,跨库查询,低代码编程

es 的api 操作 put  /索引名称/类型名称/文档id    ---创建文档

post /索引名称/类型名称------ 创建文档(随机id)

post  /索引名称/类型名称/文档id /_update   ---修改文档

Get  /索引名称/类型名称/文档id----- 查询通过id

Post /索引名称/类型名称 /_search   ----查询所有

自定义ik分词器 

1解压ik安装包 

2 在es中plugins 目录新建ik 文件夹,IK安装包复制过去

3然后重启es

GET _analyze{ "analyzer": "ik_max_word",  "text":"我喜欢睡你"}

.1编写自己的字典

2.修改ik/config/IKAnalyzer.cfg.xml

3.验证效果GET _analyze{ "analyzer": "ik_max_word",  "text":"我喜欢睡你"}

3 数据类型

字符串:text,keyword 数值: long,integer,short,byte,double,float,half float,scaled float日期类型:date布尔类型:boolean 二进制类型:binary 等等....

4 创建索引约束类型

PUT /test2{ "mappings": {}}

4.ElasticSearch索引的思路:
它是通过各种各样的变态到极致的算法还有数据结构,实现让内存中的数据少量,然后表示更多的数据(快大),在通过跳跃表的方式实现快速的根据我们联合查询的多个集合,找到交集,并集,还有差集

环境搭建

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms1024m -Xms1024m 
  elasticsearch:7.2.0
 
docker run -p 5601:5601 -d -e ELASTICSEARCH_URL=http://192.168.3.204:9200   -e ELASTICSEARCH_HOSTS=http://192.168.3.204:9200 kibana:7.2.0  

5net core 对接   nuget 包NEST 

   public void Indexinit()
        {/// 初始化准备数据

            var settings = new ConnectionSettings(new Uri(EsUrl.esurl))///创建链接
            .DefaultIndex("orders");///创建库
            var client = new ElasticClient(settings);
            List<OrderInfo> orderInfos = new List<OrderInfo>();
            for (int i = 0; i < 20; i++)
            {
                peson p = new peson()
                {
                    Age = i,
                    Id = i,
                    Name = "aaa" + i
                };

                orderInfos.Add(new OrderInfo()
                {

                    Orderid = Guid.NewGuid().ToString(),
                    ActionTime = DateTime.UtcNow.AddMinutes(-15),
                    Name = "json" + i,
                    Address = "上海",
                    Status = "购物车",
                     Peson=p
     
                });
            }
         
            client.IndexMany<OrderInfo>(orderInfos);
        }

  查询

    public void seach()
        {
            var settings = new ConnectionSettings(new Uri(EsUrl.esurl))
       .DefaultIndex("people");
            var client = new ElasticClient(settings);
            var searchResponse = client.Search<OrderInfo>(s => s
                 .From(0)
     .Size(10)
         .Query(q => q
                      .Match(m => m
                         .Field(f => f.Name)
                         .Query("陈晓勇")
                      )
                 )
             );
            var people = searchResponse.Documents;
            Console.WriteLine("查询结果");
            foreach (var item in people)
            {
                Console.WriteLine($"id:{item.Orderid},firstname:{item.Name},lastname:{item.Status}");
            }
        }

 

 集群搭建 注意点

 docker 需要调节配额

.调高jvm线程数限制vim /etc/sysctl.conf加入
vm.max_map_count=262144执行生效
sysctl -Pl
Ⅰ●
或者直接执行下面代码
sysctl -w vm.max_map_count=262144

5个分片 1个副本  3个节点 

原文地址:https://www.cnblogs.com/jasontarry/p/15470473.html