一分一毛也是爱

微信

微信

支付宝

支付宝

观海听潮

观海听潮博客

登录
还没有账号?去注册
观海听潮

观海听潮博客

注册
×

我的名片

网名:观海听潮

职业:PHP开发工程师

现居:山东省-青岛市

Email:1256699215@qq.com

网站统计

  • 观海听潮•博客
  • 81篇
  • 151条
  • 243055次
  • 31次
  • 美国弗吉尼亚州

您现在的位置是:首页  > 技术杂谈  > Laravel  > php  > elasticsearch elasticsearch

观海听潮

laravel 引入elasticsearch7.8.1搜索引擎(二)

摘要
上篇已经安装了kibanba工具,这篇文章主要讲kibanba的简单使用,包括创建索引,创建文档,基本查询等基础功能,帮助尽快熟悉elasticsearch的相关命令。

kibanba的简单使用

打开kibanba命令窗口后,访问http://127.0.0.1:5601

访问正常后,点击网页左上角图标,在Management找到Dev Tools,点击打开

截图 (2).png

1、创建索引

PUT ceshi

点击三角箭头,右侧出现如下返回值,表示索引创建成功

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "ceshi1"
}

2、删除索引

DELETE ceshi

执行结果:

{
  "acknowledged" : true
}

3、获取所有索引

GET /_search

执行结果:

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 12,
    "successful" : 12,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1484,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : []
  }
}

took:执行时间(单位毫秒)

timed_out:执行是否超时

hits.total.value: 返回所有文档的总数

hits.max_score:查询结果的匹配度,分数越高越匹配

hits.hits:所有索引的文档详细数据

4、指定超时时间time_out

GET /_search?timeout=1ms

timeout 单位ms、s、m,只返回限定时间内的数据

5、获取单个索引的文档

GET ceshi/_search

执行结果:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

6、创建索引文档

PUT ceshi/_doc/1
{
  "id":1,
  "user_name":"测试",
  "age":25,
  "phone":"15023235656",
  "sign":"php程序员"
}

执行结果:

{
  "_index" : "ceshi",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

7、获取文档内容

GET ceshi/_doc/1

执行结果:

{
  "_index" : "ceshi",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "id" : 1,
    "user_name" : "测试",
    "age" : 25,
    "phone" : "15023235656",
    "sign" : "php程序员"
  }
}

ceshi:索引名称     _doc:默认的表名   1:文档的唯一id

8、更新文档内容

POST ceshi/_doc/1
{
  "id":1,
  "user_name":"测试1243",
  "age":25,
  "phone":"15023235656",
  "sign":"php程序员"
}

执行结果:

{
  "_index" : "ceshi",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 3,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

9、删除文档内容

DELETE ceshi/_doc/1

执行结果:

{
  "_index" : "ceshi",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 4,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 4,
  "_primary_term" : 1
}

10、关闭索引

POST ceshi/_close

执行结果:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "indices" : {
    "ceshi" : {
      "closed" : true
    }
  }
}

11、开启索引

POST ceshi/_open

执行结果:

{
  "acknowledged" : true,
  "shards_acknowledged" : true
}

12、重新创建索引映射

DELETE ceshi  //删除之前的索引
PUT /ceshi   // 重新创建索引
{
  "mappings": {
    "properties":{
      "user_name":{
        "type":"text",
        "analyzer":"ik_smart"
      },
      "age":{
        "type":"integer"
      },
      "phone":{
        "type":"keyword"
      }
    }
  }
}
PUT ceshi/_doc/2  //新增一条文档
{
  "id":1,
  "user_name":"测试",
  "age":25,
  "phone":"15023235652",
  "sign":"php程序员"
}
GET ceshi/_search  //测试查询数据1(关键词查询,term)
{
  "query":{
    "bool":{
      "filter": [
        {
          "term": {
            "user_name": "测试"
          }
        }
      ]
    }
  },
  "from":0,  //查询分页(当前偏移量),from=(page-1)*size
  "size":5,  //查询数量
  "sort": [  //倒序排序
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}
GET ceshi/_search  //测试查询数据2(模糊查询,multi_match,多字段查询),must匹配度越高越排前面
{
  "query":{
    "bool":{
      "must": [
        {
          "multi_match": {
            "query": "测",
            "fields": ["user_name"]
          }
        }
      ]
    }
  }
}

模糊查询结果为空,是因为测试的分词结果只有一个,查看分词效果

GET ceshi/_analyze
{
  "analyzer": "ik_smart",
  "text":"测试"
}

执行结果:

{
  "tokens" : [
    {
      "token" : "测试",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    }
  ]
}

因为之前已经配置了单个汉字查询,所以采用ik_max_word分词就可以达到效果

DELETE ceshi  //删除之前的索引
PUT /ceshi   // 重新创建索引
{
  "mappings": {
    "properties":{
      "user_name":{
        "type":"text",
        "analyzer":"ik_max_word",
        "search_analyzer":"ik_smart"
      },
      "age":{
        "type":"integer"
      },
      "phone":{
        "type":"keyword"
      }
    }
  }
}
PUT ceshi/_doc/2  //新增一条文档
{
  "id":1,
  "user_name":"测试",
  "age":25,
  "phone":"15023235652",
  "sign":"php程序员"
}
GET ceshi/_search  
{
  "query":{
    "bool":{
      "must": [
        {
          "multi_match": {
            "query": "测",
            "fields": ["user_name"]
          }
        }
      ]
    }
  }
}

现在就可以查询数据,查看分词效果

GET ceshi/_analyze
{
  "analyzer": "ik_max_word",
  "text":"测试"
}

执行结果:

{
  "tokens" : [
    {
      "token" : "测试",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "测",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "试",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}

参考文档:

https://juejin.im/post/6844904051994263559  elasticsearch基础介绍

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/getting-started.html  elasticsearch官方操作文档

https://www.cnblogs.com/ilovepython/p/11650139.html  分词配置


讨厌 (0)
微博logo QQ空间logo QQlogo 豆瓣logo 人人logo 百度贴吧logo 有道云笔记logo

文章评论

表情表情
×
图片图片

评论列表