Elasticsearch介绍及如何使用_elasticsearch match_phrase_prefix-程序员宅基地

技术标签: elasticsearch  

是什么

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:

  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
  • 实时分析的分布式搜索引擎。
  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

基本概念:

  • 节点(Node):
    一个节点是一个单一的服务器,是你的集群的一部分,存储数据,并且参与集群的索引和搜索功能。
    一个节点可以通过配置特定的集群名称来加入特定的集群。默认情况下,每个节点被设定加入一个名称为 “elasticsearch” 的集群,这意味着如果你在你的网络中启动了一些节点,并且假设它们能相互发现,它们将会自动组织并加入一个名称是 “elasticsearch” 的集群。
  • 索引(Index):
    可以近似的理解SQL中的数据库,虽然官方文档上说这是不好的。可以包涵表和数据。
  • 类型(Type):(警告!Type在6.0.0版本中已经不赞成使用):
    可以近似的理解成是SQL中的表,里面会包涵许多数据
  • 文档(Document):
    可以近似的理解是SQL中的表里的每一条数据。

去哪下:

官网下载传送
官网下载window版(我的是6.6.1版本)。
双击运行bin目录下的 elasticsearch.bat

怎么玩:

测试
看到这个结果,说明安装,启动成功。

  • 列出所有的索引:(GET)
http://localhost:9200/_cat/indices?v
  • 创建一个索引:(PUT)
http://localhost:9200/customer

创建索引结果

  • 向索引中添加文档(PUT)
http://localhost:9200/customer/doc/1
	//其中doc是类型。

向索引中添加文档结果

  • 获取刚刚加入索引的文档:(GET)
http://localhost:9200/customer/doc/1

获取刚刚加入索引的文档

  • 删除一个索引:(DELETE)
http://localhost:9200/customer
  • 更新文档(POST)
    除了能够新增和替换文档,我们也可以更新文档。注意虽然 Elasticsearch 在底层并没有真正更新文档,而是当我们更新文档时,Elasticsearch 首先去删除旧的文档,然后加入新的文档。
http://localhost:9200/customer/doc/1/_update?pretty
{
  "doc": { "name": "Jane Doe" }
}

更新操作也可以使用简单的脚本来执行。如下的示例使用一个脚本将age增加了5:

http://localhost:9200/customer/doc/1/_update?pretty
{
  "script" : "ctx._source.age += 5"
}
  • 删除文档(DELETE):
http://localhost:9200/customer/doc/2?pretty

推荐使用Kibana进行数据查询

搜索:
  • _mget(批量获取文档)
    类似sql中的 id in(1,2,3)这样。
GET _mget
{
    
	"docs":[
		{
    
			"_index": "bank",
			"_type": "account",
			"_id": "1",
			"_source": ["balance", "city"]
		},
		{
    
			"_index": "bank",
			"_type": "account",
			"_id": "5",
			"_source": "firstname"
		}
	]
}

也可以简写:

GET /bank/account/_mget
{
    
	"ids": ["1", "2", "4"]
}
  • _bulk(批量操作)
    1.格式:
    {action:{metadata}}
    {requestbody}

    其中action(行为)可以取值:
    1.create:文档不存在时创建
    2.update:更新文档
    3.index:创建新文档或覆盖已有文档
    4.delete:删除一个文档
    create和index的区别:如果数据存在,使用create操作失败,会提示文档以存在,使用index可以成功执行。
    如果使用create创建多个,其中有存在的,那么存在的返回失败,不存在的添加成功
    其中metadata可以取值:
    _index,_type,_id

    示例:
    1.create:

    POST /bank/account/_bulk
    {
          "create":{
          "_id":"999"}}
    {
          "account_number":999, "balance": 999}
    {
          "create":{
          "_id":"1000"}}
    {
          "account_number":1000, "balance": 1000}
    {
          "create":{
          "_id":"1001"}}
    {
          "account_number":1001, "balance": 1001}
    

    2.delete:

    POST bank/account/_bulk
    {
          "delete":{
          "_index":"bank", "_type":"account", "_id":"1000"}}
    

    3.update:

    POST /bank/account/_bulk
    {
          "update":{
          "_id":"1001"}}
    {
          "doc":{
          "balance":"0"}}
    
  • term:
    用于查询指定字段包含某个词项的文档。这个查询不知道分词器的存在,所以搜索的值不会进行分词。只会拿搜索的值去倒排索引中找。

GET /bank/account/_search
{
    
	"query":{
    
		"term":{
    
			"address":{
    
				"value":"heath"
			}
		}
	}
}
  • match:
    知道分词器的存在,所以搜索的值会被分词在去查询。
GET /bank/account/_search
{
    
	"query":{
    
		"match":{
    
			"address":"511 Heath Place"
		}
	}
}
  • multi_match
    可以指定多个字段,意思是:查找fields字段值的字段中包含query字段中对应的值
GET /bank/account/_search
{
    
	"query":{
    
		"multi_match":{
    
			"query":"Worcester",
			"fields":["city", "address"]
		}
	}
}
  • match_phrase
    短语搜索,就是搜索含有指定的短语的数据。意思是搜索的值经过分词之后和es中分词保存的一致,顺序也一致,两头的可以少,中间的不可以少
GET /bank/account/_search
{
    
	"query":{
    
		"match_phrase":{
    
			"address":"511 Heath Place"
		}
	}
}
  • _source:
    用来指定返回的字段:
GET /bank/account/_search
{
    
	"query":{
    
		"multi_match":{
    
			"query":"Worcester",
			"fields":["city", "address"]
		}
	},
	"_source": ["firstname", "age"]
}

_可以写个数组来指定,也可以在 "source" 字段中加"includes"和"excludes"

GET /bank/account/_search
{
    
	"query":{
    
		"multi_match":{
    
			"query":"Worcester",
			"fields":["city", "address"]
		}
	},
	"_source": {
    
		"includes": ["age", "balance", "gen*"],
		"excludes": ["gender"]
	}
}
  • sort
    用来排序,和关系型数据库的排序类似
GET /bank/account/_search
{
    
	"query":{
    
		"match_all":{
    }
	},
	"sort":[
		{
    
			"balance":{
    
				"order":"desc"
			}
		},
		{
    
			"age":{
    
				"order":"asc"
			}
		}
	]
}
  • match_phrase_prefix:
    前缀匹配(查询的值不会分词,但是忽略大小写)
    前缀匹配结果
  • range:
    范围查询:
GET /bank/account/_search
{
    
	"query":{
    
		"range":{
    
			"age":{
    
				"gte": 20,
				"lt": 30
			}
		}
	}
}
  • wildcard:
    通配符匹配:
    通配符:
    * 代表任意多字符
    ? 代表一个字符
GET /bank/account/_search
{
    
	"query":{
    
		"wildcard":{
    
			"city":{
    
				"value": "nicho*n"
			}
		}
	}
}
  • highlight:
    高亮显示:
GET /bank/account/_search
{
    
	"query":{
    
		"wildcard":{
    
			"city":{
    
				"value": "nicho*n"
			}
		}
	},
	"highlight":{
    
		"fields":{
    
			"city":{
    }
		}
	}
}

高亮结果

  • fuzzy:
    模糊匹配,这个可不是mysql中的like,是可以错误的输入一些字 来进行匹配
GET /bank/account/_search
{
    
	"query":{
    
		"fuzzy":{
    
			"city": "Nicho1so"
		}
	}
}

  • filter查询:
    过滤查询:
    过滤查询结果
    过滤结果2
  • must,should,must_not:
GET /bank/account/_search
{
    
	"query":{
    
		"bool":{
    
			"must": [
				{
    
				  "term":{
    
				    "age":{
    
				      "value" :20
				    }
				  }
				}
			]
		}
	}
}
  • exists:
    查询某个字段不为空
GET /bank/account/_search
{
    
	"query":{
    
		"bool":{
    
			"filter": {
    
			  "exists":{
    
			    "field": "age"
			  }
			}
		}
	}
}
  • 聚合查询:
    1.sum
    sum结果
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jsty181818/article/details/103552589

智能推荐

FX3/CX3 JLINK 调试_ezusbsuite_qsg.pdf-程序员宅基地

文章浏览阅读2.1k次。FX3 JLINK调试是一个有些麻烦的事情,经常有些莫名其妙的问题。 设置参见 c:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware 下的 EzUsbSuite_UG.pdf 文档。 常见问题: 1.装了多个版本的jlink,使用了未注册或不适当的版本 选择一个正确的版本。JLinkARM_V408l,JLinkA_ezusbsuite_qsg.pdf

用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放_qopengl如何鼠标控制旋转-程序员宅基地

文章浏览阅读2.6k次。** 本文仅通过用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放, 是比较入门的级别,由于个人能力有限,新手级别,所以未能施加光影灯光等操作, 未能让显示的stl文件更加真实。****效果图:**1. main.cpp```cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); _qopengl如何鼠标控制旋转

刘焕勇&王昊奋|ChatGPT对知识图谱的影响讨论实录-程序员宅基地

文章浏览阅读943次,点赞22次,收藏19次。以大规模预训练语言模型为基础的chatgpt成功出圈,在近几日已经给人工智能板块带来了多次涨停,这足够说明这一风口的到来。而作为曾经的风口“知识图谱”而言,如何找到其与chatgpt之间的区别,找好自身的定位显得尤为重要。形式化知识和参数化知识在表现形式上一直都是大家考虑的问题,两种技术都应该有自己的定位与价值所在。知识图谱构建往往是抽取式的,而且往往包含一系列知识冲突检测、消解过程,整个过程都能溯源。以这样的知识作为输入,能在相当程度上解决当前ChatGPT的事实谬误问题,并具有可解释性。

如何实现tomcat的热部署_tomcat热部署-程序员宅基地

文章浏览阅读1.3k次。最重要的一点,一定是degbug的方式启动,不然热部署不会生效,注意,注意!_tomcat热部署

用HTML5做一个个人网站,此文仅展示个人主页界面。内附源代码下载地址_个人主页源码-程序员宅基地

文章浏览阅读10w+次,点赞56次,收藏482次。html5 ,用css去修饰自己的个人主页代码如下:&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;html xmlns="http://www.w3.org/1999/xh..._个人主页源码

程序员公开上班摸鱼神器!有了它,老板都不好意思打扰你!-程序员宅基地

文章浏览阅读201次。开发者(KaiFaX)面向全栈工程师的开发者专注于前端、Java/Python/Go/PHP的技术社区来源:开源最前线链接:https://github.com/svenstaro/gen..._程序员怎么上班摸鱼

随便推点

UG\NX二次开发 改变Block UI界面的尺寸_ug二次开发 调整 对话框大小-程序员宅基地

文章浏览阅读1.3k次。改变Block UI界面的尺寸_ug二次开发 调整 对话框大小

基于深度学习的股票预测(完整版,有代码)_基于深度学习的股票操纵识别研究python代码-程序员宅基地

文章浏览阅读1.3w次,点赞18次,收藏291次。基于深度学习的股票预测数据获取数据转换LSTM模型搭建训练模型预测结果数据获取采用tushare的数据接口(不知道tushare的筒子们自行百度一下,简而言之其免费提供各类金融数据 , 助力智能投资与创新型投资。)python可以直接使用pip安装tushare!pip install tushareCollecting tushare Downloading https://files.pythonhosted.org/packages/17/76/dc6784a1c07ec040e74_基于深度学习的股票操纵识别研究python代码

中科网威工业级防火墙通过电力行业测评_电力行业防火墙有哪些-程序员宅基地

文章浏览阅读2k次。【IT168 厂商动态】 近日,北京中科网威(NETPOWER)工业级防火墙通过了中国电力工业电力设备及仪表质量检验测试中心(厂站自动化及远动)测试,并成为中国首家通过电力协议访问控制专业测评的工业级防火墙生产厂商。   北京中科网威(NETPOWER)工业级防火墙专为工业及恶劣环境下的网络安全需求而设计,它采用了非X86的高可靠嵌入式处理器并采用无风扇设计,整机功耗不到22W,具备极_电力行业防火墙有哪些

第十三周 ——项目二 “二叉树排序树中查找的路径”-程序员宅基地

文章浏览阅读206次。/*烟台大学计算机学院 作者:董玉祥 完成日期: 2017 12 3 问题描述:二叉树排序树中查找的路径 */#include #include #define MaxSize 100typedef int KeyType; //定义关键字类型typedef char InfoType;typedef struct node

C语言基础 -- scanf函数的返回值及其应用_c语言ignoring return value-程序员宅基地

文章浏览阅读775次。当时老师一定会告诉你,这个一个"warning"的报警,可以不用管它,也确实如此。不过,这条报警信息我们至少可以知道一点,就是scanf函数调用完之后是有一个返回值的,下面我们就要对scanf返回值进行详细的讨论。并给出在编程时利用scanf的返回值可以实现的一些功能。_c语言ignoring return value

数字医疗时代的数据安全如何保障?_数字医疗服务保障方案-程序员宅基地

文章浏览阅读9.6k次。十四五规划下,数据安全成为国家、社会发展面临的重要议题,《数据安全法》《个人信息保护法》《关键信息基础设施安全保护条例》已陆续施行。如何做好“数据安全建设”是数字时代的必答题。_数字医疗服务保障方案

推荐文章

热门文章

相关标签