在Elasticsearch中,搜索是通过使用基于JSON的查询来进行的。查询由两个子句组成
- 叶子查询子句——这些子句是匹配的、术语或范围,它们在特定字段中查找特定的值。
- 复合查询子句—这些查询是叶查询子句和其他复合查询的组合,用于提取所需的信息。
Elasticsearch支持大量查询。查询以查询关键字开头,然后以JSON对象的形式包含条件和过滤器。下面描述了不同类型的查询。
- 🚌一个人可以走的很快,一群人可以走的很远🇨🇳
- 🎉点赞➕评论➕收藏 ➕关注== 养成习惯(一键四连)📝
- 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝
- 🙏作者水平有限,欢迎各位大佬指点,相互学习进步!😆
一、匹配所有查询
二、全文查询
三、匹配查询
四、多重比对查询
五、查询字符串查询
六、词级查询
七、范围查询
八、复合查询
九、地理查询
一、匹配所有查询这是最基本的查询;它返回所有内容,每个对象的得分为1.0。
POST /schools/_search
{
"query":{
"match_all":{}
}
}
在运行上面的代码时,我们得到以下结果
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"name" : "Crescent School",
"description" : "State Board Affiliation",
"street" : "Tonk Road",
"city" : "Jaipur",
"state" : "RJ",
"zip" : "176114",
"location" : [
26.8535922,
75.7923988
],
"fees" : 2500,
"tags" : [
"Well equipped labs"
],
"rating" : "4.5"
}
}
]
}
}
二、全文查询
这些查询用于搜索全文,例如章节或新闻文章。该查询根据与该特定索引或文档相关联的分析器工作。在本节中,我们将讨论全文查询的不同类型。
三、匹配查询此查询将文本或短语与一个或多个字段的值匹配。
POST /schools*/_search
{
"query":{
"match" : {
"rating":"4.5"
}
}
}
四、多重比对查询
此查询将一个或多个字段匹配的文本或短语匹配。
POST /schools*/_search
{
"query":{
"multi_match" : {
"query": "paprola",
"fields": [ "city", "state" ]
}
}
}
五、查询字符串查询
该查询使用查询解析器和query_string关键字。
POST /schools*/_search
{
"query":{
"query_string":{
"query":"beautiful"
}
}
}
六、词级查询
这些查询主要处理结构化数据,例如数字,日期和枚举。
POST /schools*/_search
{
"query":{
"term":{"zip":"176115"}
}
}
七、范围查询
该查询用于查找具有给定值范围之间的值的对象。为此,我们需要使用运算符,例如-
- gte −大于等于
- gt −大于
- lte −小于等于
- lt −小于
例如,观察下面给出的代码
POST /schools*/_search
{
"query":{
"range":{
"rating":{
"gte":3.5
}
}
}
}
还存在其他类型的术语级别查询,例如-
- 存在查询 −如果某个字段的值为非空值。
- 缺少查询 −这与存在查询完全相反,该查询搜索没有特定字段或值为空的对象。
- 通配符或regexp查询 −此查询使用正则表达式在对象中查找模式。
这些查询是不同查询的集合,这些查询通过使用布尔运算符(例如和/或,或不)或针对不同的索引或具有函数调用等彼此合并。
POST /schools/_search
{
"query": {
"bool" : {
"must" : {
"term" : { "state" : "UP" }
},
"filter": {
"term" : { "fees" : "2200" }
},
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
九、地理查询
这些查询处理地理位置和地理位置。这些查询有助于找出学校或任何其他地理位置附近的地理对象。您需要使用地理位置数据类型。
POST /geo_example/_doc
{
"mappings": {
"properties": {
"location": {
"type": "geo_shape"
}
}
}
}
运行上面的代码后,我们得到如下所示的响应:
{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "geo_example" }
现在,我们将数据发布到上面创建的索引中。
POST /geo_example/_doc?refresh
{
"name": "Chapter One, London, UK",
"location": {
"type": "point",
"coordinates": [11.660544, 57.800286]
}
}