ElasticSearch笔记

2021-12-08 16:39:45 浏览数 (1)

Elasticsearch 分布式搜索引擎

代码语言:javascript复制
ElasticSearch的搜索
复制代码

learnku.com/docs/elasti…

代码语言:javascript复制
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 AppCommon;

use AppConstantsErrorCode;
use AppExceptionBusinessException;
use ElasticsearchClientBuilder;
use HyperfGuzzleRingPHPPoolHandler;
use SwooleCoroutine;

class ElasticsearchFactory
{
    /**
     * elasticsearch用户日志记录表别名
     */
    public const ES_USER_LOG_ALIAS = 'es_saas_user_log_alias';

    /**
     * Describe:获取elasticsearch连接客户端
     * @return ElasticsearchClient
     * 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…

下载

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

启用

D:elasticsearch-7.1.0>.binelasticsearch.bat

0 人点赞