文档操作(ES 系列详解 - 重点)

本贴最后更新于 1504 天前,其中的信息可能已经时移世异

搜索

GET /yscxy/user/_search?q=name:"野生程序员2"

image.png

image.png分值越高,也就意味着匹配度越高!也就是权重

复杂查询



GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生小子"
    }
  
  },
  "_source":["name","tags"]  #自定义查询参数
}

排序

GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生小子"
    }
  
  },
  "_source":["name","age"],
  "sort":[                    #通过哪个字段进行排序
      {
        "age":"asc"
      }
    ]
}

分页

GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生小子"
    }
  
  },
  "_source":["name","age"],
  "sort":[
      {
        "age":"asc"
      }
    ],
    "from":0,            #从第几条开始
    "size":1		#返回多少条数据
}

image.png

当然数据的下标也是从 0 开始的

布尔值查询

mast 命令,类似 mysql 中的 and

GET /yscxy/user/_search
{
  "query":{
   "bool":{
     "must": [
       {
         "match": {
           "name": "野生程序员"
         }
       },
        {
          "match": {
           "age": 3
         }
        }
     ]
   }
  }
}

image.png

上面也就是多条件查询!

should 相当于 or,两个条件满足一个就好了

GET /yscxy/user/_search
{
  "query":{
   "bool":{
     "should": [
       {
         "match": {
           "name": "野生程序员"
         }
       },
        {
          "match": {
           "age": 3
         }
        }
     ]
   }
  }
}

must_not 也就是非 相当于 not

GET /yscxy/user/_search
{
  "query":{
   "bool":{
     "must_not": [
   
        {
          "match": {
           "age": 23
         }
        }
     ]
   }
  }
}

过滤器

在查询的时候可以,可以使用 filter 进行数据过滤

GET /yscxy/user/_search
{
  "query":{
   "bool":{
     "must": [
       {
          "match": {
           "name": "野生"
         }
        }
     ],
    "filter": [
      {
        "range":{
         "age":{
           "gte":20
         }
       }
      }
    ]
   }
  }
}

当然也可以这样查询

GET /yscxy/user/_search
{
  "query":{
   "match": {
     "tags": "男 旅游"   #多个条件直接用空格隔离开
   }
  }
}

精确查询

term 也就是指定词语进行精确查询,这样性能,效率更加快速

term 直接查询精确的

match 会使用分词器进行解析(先分析,再通过分析的文档进行查询,利用倒排索引)

两个类型,一个是 text,另一个是 keyword ,keyword 不会被分词器解析的,而 text 会

下面我们创建文档进行测试

PUT testbdb
{
 "mappings": {
   "properties": {
     "name":{
       "type": "text"
     },
     "desc":{
       "type": "keyword"
     }
   }
 } 
}
PUT testbdb/_doc/1
{
  "name":"野生程序",
  "desc":"java desc"
  
}
PUT testbdb/_doc/2
{
  "name":"野生程序",
  "desc":"java desc2"
  
}

GET testbdb/_search
{
  "query": {
    "term": {
      "desc": "java desc"
    }
  }
}

image.png

可以看到,类型为 keeyword 的字段并没有被分词器进行解析

高亮查询

GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生"
    }
  },
  "highlight":{
    "fields": {
      "name": {}
    }
  }
}

查询结果

image.png

自定义样式

GET /yscxy/user/_search
{
  "query":{
    "match": {
      "name": "野生"
    }
  },
  "highlight":{
    "pre_tags": "<p class-'key' style-'color:red'> ",
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
}

image.png

  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 209 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...