2023-02-09 - 2 Elasticsearch搜索入门

news/2024/7/7 5:49:22 标签: elasticsearch, 大数据

1 创建索引

完成搜索的第一步是建立搜索数据集的对象,即建立索引。在定义酒店的搜索需求时,应该包括的字段有酒店标题、所属城市和房价等。对于酒店标题来说,需要按照用户输入的关键词进行模糊搜索,因此应该定义成文本(text)型;对于所属城市来说,只需进行相等与否的判断,定义成普通的关键词类型(keyword)即可;对于房价来说,只需进行大小比较的判断,因此定义成数值中的双精度浮点型。假设使用默认的分片数和副本数,整体的索引创建语句如下:

PUT /hotel 
{ 
    "mappings":{ 
        "properties":{           //指定字段名称及其数据类型 
            "title":{ 
                "type":"text"    //title字段为text类型 
            }, 
            "city":{ 
               "type":"keyword"   //city字段为keyword类型 
            }, 
            "price":{ 
                "type":"double"   //price字段为double类型 
            } 
        } 
    } 
}

2 写入文档

为方便演示后面的搜索功能,hotel索引创建后,需要在索引中填充一些数据。例如,在目标索引中写入下面的数据:

POST /hotel/_doc/001 
{ 
"title":"好再来酒店", 
"city":"青岛", 
"price":578.23 
}

执行上述命令后,在索引中创建了一条ID为001的文档。

3 根据_id搜索文档

GET /hotel/_doc/001
{ 
 "_index" : "hotel",                  //索引名称 
  "_type" : "_doc", 
 "_id" : "001",                       //文档ID 
 "_version" : 1,                      //文档版本 
  "_seq_no" : 0, 
  "_primary_term" : 1, 
  "found" : true, 
 "_source" : {                        //文档内容 
    "title" : "好再来酒店", 
    "city" : "青岛", 
    "price" : 578.23 
  } 
}

从上面显示的结果中可以看出搜索的一些元数据,如是否找到、索引名称、文档ID值、文档版本等,在_source中展示了命中的文档的原始数据,这和1.5.2节写入的数据是相同的。

4 根据一般字段搜索文档

在ES中进行搜索时需要用到query子句,其请求形式如下

GET /${index_name}/_search 
{ 
 "query": {                          //查询内容 } 
}

query子句可以按照需求填充查询项。假设按照城市进行搜索,把酒店文档搜索出来。因为只需要进行文本是否相等的判断,所以需要用到term搜索,在后面的章节中将会详细介绍term搜索,此处只进行简单使用

GET /hotel/_search 
{ 
  "query": { 
    "term": { 
      "price": {                                    //根据价格搜索文档 
        "value": 578.23 
      } 
    } 
  } 
}
{ 
  "took" : 1, 
  "timed_out" : false, 
 "_shards" : {       //命中的分片信息 
    "total" : 1, 
    "successful" : 1, 
    "skipped" : 0, 
    "failed" : 0 
  }, 
  "hits" : {  
   "total" : {                         //命中的文档总数 
      "value" : 1, 
      "relation" : "eq" 
    }, 
   "max_score" : 1.0,                  //命中文档中的最高分
   "hits" : [                          //命中文档集合的信息
      { 
        "_index" : "hotel",            //文档所在索引 
        "_type" : "_doc",   
        "_id" : "001",                //文档ID 
        "_score" : 1.0,               //文档分值 
        "_source" : {                 //文档内容 
          "title" : "好再来酒店", 
          "city" : "青岛", 
          "price" : 578.23 
        } 
      } 
    ] 
  } 
}

由上面的结果可以看出,ES不仅返回了搜索的文档结果,而且对结果进行了打分计算,因为本例使用的是比较简单的搜索,并没有使用其核心的计算公式,所以得分是1。

5 根据文本字段搜索文档

欢迎进入真正的搜索世界!前面的搜索功能传统的关系型数据也可以胜任,但是对文本进行模糊匹配并给出匹配分数这一功能是搜索引擎所独有的。此处使用match搜索对某个字段进行模糊匹配,按照标题进行模糊搜索,示例如下:

GET /hotel/_search 
{ 
  "query": { 
   "match": {                                    //根据title字段搜索 
      "title": "再来" 
    } 
  } 
}
{"max_score" : 0.5753642,                     //命中文档中的最高分 
   "hits" : [                                    //命中文档集合的信息 
      {  
        "_index" : "hotel", 
        "_type" : "_doc", 
        "_id" : "001", 
        "_score" : 0.5753642, 
        "_source" : { 
          "title" : "好再来酒店", 
          "city" : "青岛", 
          "price" : 578.23 
        } 
      } 
    ] 
  } 
}

由上面的结果可以看出,ES对结果进行了打分计算,此处使用了对文本打分计算的算法。关于算法的详细介绍请参考后面章节。


http://www.niftyadmin.cn/n/50324.html

相关文章

用“AI“挑选一件智慧礼物

在久违的烟火气回归之际,充满希望的生活可能就从精心挑选一件新年礼物开始。在罗列礼品清单时,你会想到 “数据”也是其中之一吗?事实上,几乎所有时下最受欢迎的带有“智能”一词的设备,都是由大量高质量的数据创建。我…

【官方 | 计算机二级Python教程】第八章:Python计算生态

【官方 | 计算机二级Python教程】第八章:Python计算生态参考书目第八章:Python计算生态本章知识导图8.1 计算思维8.2 程序设计方法论8.3 计算生态与生态式编程8.4 基本的Python内置函数习题本文代码编译环境及版本更新日志参考书目 拜读的是计算机等级考…

TCO-PNB ester,1438415-89-4 ,反式环辛烯对硝基苯酯,可用于标记蛋白质

TCO-PNB ester,TCO-PNB,反式环辛烯-对硝基苯酯 ,反式环辛烯对硝基苯酯,TCO-PNB酯产品结构式:产品规格:1.CAS号:1438415-89-4 2.分子式:C15H17NO53.分子量:291.34.包装规格…

laravel实现队列

一:队列配置队列的配置文件放置在config/queue.php文件中,laravel框架中支持的队列驱动有:sync, database, beanstalkd, sqs, redis,null对应着:同步(本地使用)驱动,数据库驱动,bean…

智能工厂自动化设备如何将数据采集到物联网云平台上

制造业工厂在进行生产管理、数字化转型升级的过程中,大量自动化设备的数据采集上云一直是困扰厂商的难题之一。因设备种类多、工艺复杂、设备老旧无多余通信接口导致数据无法集中、工艺无法实时管控,加上设备服务商的本地支持比较有限,因此设…

《MySQL系列-InnoDB引擎19》文件-日志文件-二进制日志

日志文件 日志文件记录了影响MySQL数据库的各种类型活动。MySQL数据库中常见的日志文件有: 错误日志(error log)二进制日志(bilog)慢查询日志(slow query log)查询日志(log) 这些日志文件可以帮助DBA对MySQL数据库的运行状态进行诊断,从而更好的进行数…

linux001之linux系统部署安装

注意:本次安装讲解以乌班图(Ubuntu) 虚拟机来说明讲解,既然学习linux,就无需用图形界面了,直接用服务器版本 1. 下载乌班图 网址:https://www.ubuntu.org.cn/download/server 然后就可以看到右下角有下载提示&#xff…

[SSD固态硬盘技术 14] 预读技术详解

随着中央处理单元、图形处理器和其他处理元件的速度提升,存储设备已经成为影响计算系统的总体性能的瓶颈。SSD仍然可以拖慢主机速度。 什么是预读? 在下一个读取请求前,可以在读取队列空闲时间期间预先获取该下一个数据并且将其存储在高速缓存缓存(DRAM)中,因此,该下一个…