ElasticSearch笔记

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ElasticSearch笔记

Elasticsearch 分布式搜索引擎

ElasticSearch的搜索

learnku.com/docs/elasti…

GET /es_saas_user_log_alias/_search
{
  "query": {
    "match_all": {}
  }
}
GET /es_saas_user_log_alias/_search
{
  "query": {
    "bool": {
      "must": [
        {
            "term": {
            "user_id":  35
          }
        },
        {
            "term": {
            "behavior_type": 2
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "item_type": {
              "value": 4
            }
          }
        }
      ],
      "filter": [
        {
          "range": {
            "created_at": {
              "gte": 1629781809,
              "lte": 1632460203
            }
          }
        }
      ]
    }
  },
  "size": 5,
  "from": 0,
  "sort": [
    {
      "created_at": {
        "order": "desc"
      }
    }
  ]
}
$query = [
            'query' => [
                'bool' => [
                    'must' => [
                        [
                            'term' => [
                                'user_id' => (int)$id,
                            ],
                        ],
                        [
                            'term' => [
                                'behavior_type' => 2,//浏览,文章方案
                            ],
                        ],
                    ],
                    'must_not' => [
                        'term' => [
                            'item_type' => 4,//不是公众号
                        ],
                    ],
                    'filter' => [
                        'range' => [
                            'created_at' => [
                                'gte' => time() - 30 * 86400,//近一个月
                                'lte' => time() + 86400,
                            ]
                        ],
                    ],
                ]
            ],
            'sort' => [
                'created_at' => [
                    'order' => 'desc'
                ]
            ]
        ];
 //es查询
        $query = [
            //时间倒序 order
            'sort' => [
                'created_at' => [
                    'order' => 'desc'
                ]
            ],
            //每个用户只显示一条
            'collapse' => [
                'field' => 'user_id'
            ],
        ];
//只显示触达 where1
        $query['query']['bool']['must'][] = [
            'term' => [
                'behavior_type' => 5,
            ]
        ];
        //只显示指定工作室 where2
        $query['query']['bool']['must'][] = [
            'term' => [
                'store_studio_id' => (int)$storeStudioId,
            ]
        ];
//不记录游客信息 wherenot
        $query['query']['bool']['must_not'][] = [
            'term' => [
                'user_id' => 0,
            ]
        ];
//用户数组存在wherein array
        if ($userIdArr) {
            $query['query']['bool']['filter'][] = [
                'terms' => [
                    'user_id' => $userIdArr,
                ]
            ];
        }
//创建时间 wherebetween
        if (!empty($createdAt)) {
            if (!empty($createdAt[0]) && !empty($createdAt[1])) {
                $query['query']['bool']['filter'][] = [
                    'range' => [
                        'created_at' => [
                            'gte' => strtotime($createdAt[0]),
                            'lte' => strtotime($createdAt[1]),
                        ]
                    ]
                ];
            }
        }
  $params = [
            'index' => 'es_saas_user_log_alias',
            '_source' => ['user_id', 'store_studio_id', 'behavior_type', 'item_type', 'item_id', 'created_at', 'source_type', 'touch_type', 'item_type', 'item_id'],
            'body' => $query,
            'from' => ($page - 1) * $pageSize,
            'size' => $pageSize
        ];
        $data = ElasticsearchFactory::client()->search($params);
/////
 "hyperf/elasticsearch": "~2.0.0",
ElasticsearchFactory.php
<?php
/**
 * Created by PhpStorm.
 * Created by lkz at 2021/9/14 17:16
 */
namespace App\Common;
use App\Constants\ErrorCode;
use App\Exception\BusinessException;
use Elasticsearch\ClientBuilder;
use Hyperf\Guzzle\RingPHP\PoolHandler;
use Swoole\Coroutine;
class ElasticsearchFactory
{
    /**
     * elasticsearch用户日志记录表别名
     */
    public const ES_USER_LOG_ALIAS = 'es_saas_user_log_alias';
    /**
     * Describe:获取elasticsearch连接客户端
     * @return \Elasticsearch\Client
     * Created by lkz at 2021/09/17 09:26
     */
    static public function client()
    {
        $builder = ClientBuilder::create();
        if (Coroutine::getCid() > 0) {
            $handler = make(PoolHandler::class, [
                'option' => [
                    'max_connections' => 50,
                ],
            ]);
            $builder->setHandler($handler);
        }
        $client = $builder->setHosts([env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200')])->build();
        return $client;
    }
    /**
     * Describe:批量添加数据
     * @param string $index 索引名称
     * @param string $body 数据
     * @return mixed
     * Created by xuqy at 2021/09/17 09:26
     */
    public static function bulk($index, $list) 
    {
        if (empty($index) || empty($list)) {
            throw new BusinessException(ErrorCode::BUSINESS_ERROR, '参数都不能为空');
        } 
        foreach ($list as $value) {
            $params['body'][] = [
                'index' => [
                    '_index' => $index,
                ]
            ];
            $params['body'][] = $value;
        }
        $result = self::client()->bulk($params);
        return $result;
    }
}

gitee.com/owenzhang24…

01ebd755782e4c909dad0843d3544acf.jpeg

下载

www.elastic.co/guide/en/el…

启用

D:\elasticsearch-7.1.0>.\bin\elasticsearch.bat


相关实践学习
利用Elasticsearch实现地理位置查询
本实验将分别介绍如何使用Elasticsearch7.10版本进行全文检索、多语言检索和地理位置查询三个Elasticsearch基础检索子场景的实现。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
19天前
|
安全
【Elasticsearch6】安装笔记
【Elasticsearch6】安装笔记
15 2
|
2月前
|
关系型数据库 MySQL 索引
|
2月前
|
前端开发 Java iOS开发
elasticsearch8.1源码编译笔记
elasticsearch8.1源码编译笔记
83 0
|
2月前
|
自然语言处理 安全 关系型数据库
|
JSON 安全 搜索推荐
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
703 0
|
Java 数据库 Docker
Elasticsearch笔记
Elasticsearch笔记
128 0
Elasticsearch笔记
|
存储 Web App开发 搜索推荐
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch核心技术与实战-极客课程笔记
Elasticsearch核心技术与实战-极客课程笔记
408 0
Elasticsearch核心技术与实战-极客课程笔记
|
JSON 安全 Java
白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。(一)
白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。(一)
231 0
|
存储 负载均衡 算法
白日梦的ES笔记三:万字长文 Elasticsearch基础概念统一扫盲(三)
白日梦的ES笔记三:万字长文 Elasticsearch基础概念统一扫盲(三)
162 0