如何通过beisensearch创建

常见概念

BeisenSearchV3

beisensearchv3 是北森针对elasticsearch 暴露的restful api封装的一套.net 客户端调用类库。它包含了基本的elasticsearch功能,索引的增删改查,搜索,聚类,搜索建议等功能。

关键知识

分片(shards)

Elasticsearch 它会把一个索引分解为多个小的索引,每一个小的索引就叫做分片。

分片之后就可以把各个分片分配到不同的节点中去。

分片用于Elasticsearch在你的集群中分配数据。想象把分片当作数据的容器。文档存储在分片中,然后分片分配给你集群中的节点上。

当你的集群扩容或缩小,Elasticsearch将会自动在你的节点间迁移分片,以使集群保持平衡。

一个分片(shard)是一个最小级别的“工作单元(worker unit)”,它只是保存索引中所有数据的一小片.我们的文档存储和被索引在分片中,但是我们的程序不知道如何直接与它们通信。取而代之的是,他们直接与索引通信.Elasticsearch中的分片分为主分片和副本分片,复制分片只是主分片的一个副本,它用于提供数据的冗余副本,在硬件故障之后提供数据保护,同时服务于像搜索和检索等只读请求,主分片的数量和复制分片的数量都可以通过配置文件配置。但是主切片的数量只能在创建索引时定义且不能修改.相同的分片不会放在同一个节点上。

副本(replicas)

Elasticsearch的每一个分片都可以有0到多个副本,而每一个副本也都是分片的完整拷贝,好处是可以用它来增加速度的同时也提高了系统的容错性。

一旦Elasticsearch的某个节点数据损坏或则服务不可用的时候,那么这个时就可以用其他节点来代替坏掉的节点,以达到高可用用的目的。

经验技巧

1.索引的创建时一个漫长积累的过程,每天的数据更新数据新增都会增加索引的数据量。索引支撑了我们大量的搜索业务,所以索引如果丢失将会引起大规模的业务瘫痪。正因为如此,所以现在beisensearch的类库中是屏蔽掉了删除索引的接口防止了不必要的误操作。

2.通常情况下我们不建议通过beisensearch接口来来对索引,mapping的操作,对这两个对象的操作应该放在beisencloud中进行。

实例

创建一个无设置参数索引对象:

public static void CreateIndex(string index)
        {
            var createindex = ElasticCommands.CreateIndex(index);
            var result = ElasticSearchManager.CreateIndex(Helper.Application, createindex);
        }
`
  • index :索引名称。比如(Recruitment)
  • Helper.Application:应用名称。

注意:理论上应用名称和索引名称是一样的。索引名称即是整个索引的对象的名称。应用名称是用来区分不同的应用在连接池分配上可以有不同的处理,在beisen体系下这两个的名称是一样的。

创建一个有设置参数索引对象:

shards:10 分片为10 replicas:1 副本为1

public void CreateIndexWithSettings()
        {
            var index = "Recruitment";

            var createindex = ElasticCommands.CreateIndex(index)
                .Settings(new IndexSettings(10, 1));

            var result = ElasticSearchManager.CreateIndex(Helper.Application, createindex);
        }

创建一个带mapping的索引

 public void CreateIndexWithMappings()
        {
            var index = "Recruitment";

            var type1 = new TypeMapping("ApplicantProfile")
                .Field(new StringField("Name"))
                .Field(new StringField("Email"))
                .Field(new IntField("Phone"));


            var createindex = ElasticCommands.CreateIndex(index)
                .Mappings(new List { type1 });

            var result = ElasticSearchManager.CreateIndex(Helper.Application, createindex);

        }