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 -c elasticsearch-6.6..tar.gz.sha512
tar -xzf elasticsearch-6.6..tar.gz
cd elasticsearch-6.6./

安装完毕之后,测试是否成功:

./bin/elasticsearch

此开启方式是前台开启,如果要后台运行

./bin/elasticsearch &

curl -X GET "localhost:9200/"

得到下面的信息:

下面设置在守护进程中运行,开机可以自启动es:

[program:elasticsearch]
command=/home/shippingadmin/elasticsearch-6.6./bin/elasticsearch startsecs=
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()
.Size()
.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

elasticsearch数据库使用的更多相关文章

  1. [转帖]Elasticsearch数据库

    Elasticsearch数据库 2018-05-06 11:30:48 七色米 阅读数 23634更多 分类专栏: 数据库   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转 ...

  2. elasticSearch数据库、skywalking集群部署

    Centos6上面安装elasticsearc数据库的集群 安装的是6.3.2版本,安装之前首先要先安装jdk1.8版本 安装之前首先需要关闭防火墙 Centos6 sudo service ipta ...

  3. Elasticsearch数据库 | Elasticsearch-7.5.0应用搭建实战

    Elasticsearch 是一个可用于分布式以及符合RESTful 风格的搜索和数据分析引擎.-- Elastic Stack 官网 搭建Elasticsearch的"那些事儿" ...

  4. Elasticsearch数据库优化实战:让你的ES飞起来

    摘要:ES已经成为了全能型的数据产品,在很多领域越来越受欢迎,本文旨在从数据库领域分析ES的使用. 本文分享自华为云社区<Elasticsearch数据库加速实践>,原文作者:css_bl ...

  5. ElasticSearch数据库同步插件logstash

    1.下载和elasticsearch 相同版本的logstash. 2.进行解压后,进入bin下,新建一个文件mysql.conf,并输入 input { stdin{ }} output { std ...

  6. Elasticsearch数据库 | Elasticsearch-7.5.0应用基础实战

    Elasticsearch 是一个可用于分布式以及符合RESTful 风格的搜索和数据分析引擎.-- Elastic Stack 官网 关于Elasticsearch的"爱恨情仇" ...

  7. elasticsearch数据库(ES)

    1. http://blog.csdn.net/cnweike/article/details/33736429 http://www.oschina.net/translate/elasticsea ...

  8. 【ElasticSearch】给ElasticSearch数据库配置慢查询日志

    给ElasticSearch引擎配置慢查询日志,可以实时监控搜索过慢的日志.虽然ElasticSearch以快速搜索而出名,但随着数据量的进一步增大或是服务器的一些性能问题,会有可能出现慢查询的情况. ...

  9. 什么是Elasticsearch

    一个采用Restfull API 标准的高扩展性和高可用性的实时数据分析的全文搜索工具 Elasticsearch 涉及到的一些概念: 1.Node(节点): 单个的装有Elasticsearch服务 ...

随机推荐

  1. bzoj 1576: [Usaco2009 Jan]安全路经Travel【spfa+树链剖分+线段树】

    这几天写USACO水题脑子锈住了--上来就贪心,一交就WA 事实上这个是一个叫最短路树的东西,因为能保证只有一条最短路,所以所有最短路合起来是一棵以1为根的树,并且在这棵树上,每个点被精灵占据的路是它 ...

  2. 清北考前刷题da5下午好

    /* (4,1)*(3,1)*(2,1)的话1变成2然后一直是2 2变成1然后变成3 3变成1然后变成4 4变成1 */ #include<iostream> #include<cs ...

  3. php可以定义数组的常量吗

    是这样吗?<?php define('BEST_PHPER',array('name'=>'巩文','address'=>'china')); My God,明确告诉你不可以:原因是 ...

  4. 暴力+构造 Codeforces Round #283 (Div. 2) C. Removing Columns

    题目传送门 /* 题意:删除若干行,使得n行字符串成递增排序 暴力+构造:从前往后枚举列,当之前的顺序已经正确时,之后就不用考虑了,这样删列最小 */ /*********************** ...

  5. 389 Find the Difference 找不同

    给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母.示例:输入:s = "abcd"t = ...

  6. Xml学习笔记(3)利用递归解析Xml文档添加到TreeView中

    利用递归解析Xml文档添加到TreeView中 private void Form1_Load(object sender, EventArgs e) { XmlDocument doc = new ...

  7. sql 所有数据表中 插入字段

    declare @tablename varchar(200)declare @sql varchar(2000)declare cur_t cursor forselect name from sy ...

  8. EasyUI tree 异步树与采用扁平化实现的同步树

    所谓好记性不如烂笔头,为了以防忘记,才写下这篇博客,废话不多.. 异步树: tips:   可以采用easyui里的原始数据格式,也可以采用扁平化的数据格式. 使用场景: 当菜单模块数量庞大或者无限极 ...

  9. FCC 基础JavaScript 练习5

    在赌场21点游戏中,玩家可以通过计算牌桌上已经发放的卡牌的高低值来让自己在游戏中保持优势,这就叫21点算法. 根据下面的表格,每张卡牌都分配了一个值.如果卡牌的值大于0,那么玩家应该追加赌注.反之,追 ...

  10. IDEA 提示Cannot resolve symbol

    将Springboot项目,构建为多个模块的时候,idea的有些类中报错Cannot resolve symbol 解决: 1.File->Invalidate Caches/Restart 清 ...