邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

Elasticsearch的基本用法(增删改查)
================基础概念=======================
索引--含有相同属性的文档集合
类型--索引可以定义一个或者多个类型,文档必须属于一个类型
文档--文档是可以被索引的基础数据单位

分片--每个索引都有多个分片,每个分片是一个Lucence索引
备份--拷贝一份分片就完成了分片的备份


==============基本用法============================
RESTFul API
API基本格式 http://<ip>:<port>/<索引>/<类型>/<文档id>
常用HTTP动词 GET/PUT/POST/DELETE
=========索引===========
创建索引
1.非结构化创建
查看索引信息mappings为空{}
2.结构化创建
====利用elasticsearch-head创建
复合查询-
http://localhost:9200/
book/novel/_mappings
{
  "novel": {
"properties": {
  "title": {
"type": "text"
  }
}
  }
}
提交请求 post+易读+验证JSON
===利用postman创建people
http://localhost:9200/people+put方式+json(Body+raw+JSON)
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
},
"mappings":{
"man":{
"properties":{
"name":{
"type":"text"
},
"contury":{
"type":"keyword"
},
"age":{
"type":"integer"
},
"date":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
},
"woman":{

}
}
}

=========插入===========
1.指定文档id插入
http://localhost:9200/people/man/1 + put方式 + json(Body+raw+JSON)
{
"name":"action",
"country":"China",
"age":30,
"date":"1989-11-17"
}

2.自动产生文档id插入
http://localhost:9200/people/man + post方法 + json(Body+raw+JSON)
{
"name":"xingdong",
"country":"China",
"age":18,
"date":"1989-10-20"
}

=========修改===========
1.直接修改
http://localhost:9200/people/man/1/_update + post方法 + json(Body+raw+JSON)
{
"doc":{
"name":"who is action"
}
}
2.脚本方式修改
http://localhost:9200/people/man/1/_update + post方法 + json(Body+raw+JSON)
{
"script":{
"lang":"painless",
"inline":"ctx._source.age += 10"
}
}
或者
{
"script":{
"lang":"painless",
"inline":"ctx._source.age = params.age",
"params":{
"age":60
}
}
}
=========删除===========
1.删除文档
http://localhost:9200/people/man/1 + DELETE方法
2.删除索引
http://localhost:9200/people + DELETE方式
或者利用elasticsearch-head ->动作->删除

=========查询===========
1.简单查询
http://localhost:9200/people/man/1 + GET方法

2.条件查询
http://localhost:9200/people/_search  + POST方法
2.1=====查询全部==========
{
"query":{
"match_all":{}
}
}
2.2===============
{
"query":{
"match_all":{}
},
"from":1,
"size":1
}
2.3=======匹配+排序=========
{
"query":{
"match":{
"name":"action"
}
},
"sort":[
{"age":{"order":"desc"}}
]
}
3.聚合查询
3.1============================
{
"aggs":{
"group_by_age":{
"terms":{
"field":"age"
}
},
"group_by_date":{
"terms":{
"field":"date"
}
}
}
}
3.2===========总数+最小+最大+平均年龄==================
{
"aggs":{
"group_by_age":{
"stats":{
"field":"age"
}
}
}
}
{
"aggs":{
"group_by_age":{
"min":{
"field":"age"
}
}
}
}


================高级查询=====================

=======子条件查询 特定字段查询所指特定值=======
=====1.Query Context=====
在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好。

常用查询
全文本查询 针对文本类型数据
字段级别查询 针对结构化数据,如数字、日期等
1.===match_phrase分词匹配====
会匹配到 name为"who is action" 或者 "action is who" 的数据
{
"query":{
"match_phrase":{
"name":"who"
}
}
}
2.===multi_match==== 匹配name和country字段中有action的数据
{
"query":{
"multi_match":{
"query":"action",
"fields":["name","country"]
}
}
}
3.===query_string=== (OR和AND大写)
{
"query":{
"query_string":{
"query":"(action14 AND 13action) OR China",
"fields":["name","country"] //字段可以去掉
}
}
}
4.===term=====
{
"query":{
"term":{
"name":"action14"
}
}
}
5.====range===== 范围 gt>,gte>=,lt<,lte<=
{
"query":{
"range":{
"age":{
"gte":10,
"lte":12
}
}
},
"sort":[
{"age":{"order":"desc"}}
]
}

{
"query":{
"range":{
"date":{
"gte":"2019-01-01",
"lte":"now" //现在的日期
}
}
}
}
=====2.Filter Context===== 
在查询过程中,只判断该文档是否满足条件,只有Yes或者No。
{
"query":{
"bool":{
"filter":{
"term":{
"name":"action"
}
}
}
}
}

===复合条件查询 以一定的逻辑组合子条件查询===

常用查询
1.固定分数查询(不支持单独的match,只支持filter)2.布尔查询3....more
====事例 固定分数====
1.==这个时候_score会有分数===
{
"query":{
"match":{
"name":"who"
}
}
}
2.==这个时候_score等于1===
{
"query":{
"constant_score":{
"filter":{
"term":{
"name":"action"
}
}
}
}
}
3.==这个时候_score等于2===
{
"query":{
"constant_score":{
"filter":{
"term":{
"name":"action"
}
},
"boost":2
}
}
}

====事例 布尔查询====
1.===should===
{
"query":{
"bool":{
"should":[
{
"match":{
"name":"China"
}
},
{
"match":{
"country":"China"
}
}

]
}
}
}
2.===must===
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"China"
}
},
{
"match":{
"country":"China"
}
}

]
}
}
}
3.======
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"China"
}
},
{
"match":{
"country":"China"
}
}

],
"filter":{
"term":{
"age":16
}
}
}
}
}
4.===must_not====
{
"query":{
"bool":{
"must_not":[
{
"term":{
"name":"action"
}
}
]
}
}
}


Elasticsearch的单实例以及分布式安装
============单实例安装============
下载地址
https://www.elastic.co/cn/downloads/elasticsearch 
下载完解压后
Run bin/elasticsearch (or bin\elasticsearch.bat on Windows)  bin/elasticsearch -d 后台启动
Run curl http://localhost:9200/ or Invoke-RestMethod http://localhost:9200 with PowerShell

============视图插件安装============
https://github.com/mobz/elasticsearch-head    //视图
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start  // npm run start &

这个时候访问 http://localhost:9100/ 显示未连接状态

修改elasticsearch/config/elasticsearch.yml
加入以下内容,注意格式
http.cors.enabled: true
http.cors.allow-origin: "*"

重新启动 elasticsearch 再访问 http://localhost:9100/ 显示连接(集群健康值)

===========分布式安装===================
修改elasticsearch/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

cluster.name: action
node.name: master
node.master: true
network.host: 127.0.0.1

重启elasticsearch服务器,访问http://localhost:9100/查看服务是否正常

添加slave节点

新建slave_1和slave_2文件夹,把之前下载的程序分别解压到这两个目录
分别修改其配置文件
slave_1/config/elasticsearch.yml
加入以下内容
cluster.name: action
node.name: slave1
network.host: 127.0.0.1
http.port: 8000
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

slave_2/config/elasticsearch.yml
加入以下内容
cluster.name: action
node.name: slave2
network.host: 127.0.0.1
http.port: 8200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

这个时候访问http://localhost:9100/可以看到三个实例(master、slave_1、slave_2)
WINDOWS下elasticsearch-head创建索引后显示Unassigned/yellow问题
查询各种资料后说是硬盘剩余空间过少的原因,我的硬盘容量使用已经快大于90%了
通过这个链接可以查看
http://localhost:9200/_cat/allocation?v

1.调整硬盘利用率
http://localhost:9200/_cluster/setting
发送put请求,可以利用postman软件
{
"transient":{
"cluster.routing.allocation.disk.watermark.low": "90%"
}
}

2.或者更高数据保存路径

path.data: E:\es\data
path.logs: E:\es\logs


ps:我是把我D盘的空间清理了一下搞定的!!

原文地址:https://www.cnblogs.com/carryLess/p/9452000.html
mysql之group_concat()函数

1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

3、举例:
表 table_a ,字段 id name cid
表 table_b ,字段 id title
表 table_b 的 id 对应 table_a中的cid

select b.*,(select group_concat(a.name) from table_a a where a.cid = b.id) names from table_b b

select b.*,(select group_concat(a.name order by a.id desc separator '_') from table_a a where a.cid = b.id) names from table_b b

解决页面加载防盗链图片失败问题


在页面head标签内加入
<meta name="referrer" content="never">

referer的metedata属性可设置content属性值为以下集合:
1.never 
2.always 
3.origin
说明:
如果referer-policy的值为never:删除http head中的referer;
如果referer-policy的值为default:如果当前页面使用的是https协议,而正要加载资源使用的是普通的http协议,则将http header中额referer置为空;
如果referer-policy的值origin:只发送origin部分;
如果referer-policy的值为always:不改变http header中的referer的值;
举例
如果页面中包含了如下 meta 标签,所有从当前页面中发起的请求将不会携带 referer:<meta name="referrer" content="never">
如果页面中包含了如下 meta 标签,则从当前页面中发起的 http请求将只携带 origin 部分:<meta name="referrer" content="origin">

SpringBoot项目打包简记
项目目录 first-app-demo

模型层:model
持久层:persistence
表示层:web

把 jar 修改成 pom,默认是 jar
pom.xml(first-app-demo)

模型层:model
持久层:persistence
表示层:web
web 依赖于 persistence ,persistence 依赖于 model
web Controller ->UserRepository -> User


------------jar打包方式-------------

cd D:\JAVA_PROJECT\first-app-demo

在pom.xml(fisrt-app-demo)中加入 ,mainClass 复制接口 ,然后把下面这段话 剪贴 到 web 模块下的 pom.xml 里面
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
-----
<configuration>
<mainClass>com.imooc.firstappdemo.FirstAppDemoApplication</mainClass>
</configuration>
----
</plugin>
</plugins>
</build>

mvn -Dmaven.test.skip -U clean package

会显示如下::::
Building jar: D:\JAVA_PROJECT\first-app-demo\web\target\web-0.0.1-SNAPSHOT.jar

执行
cd web\target\
java -jar web-0.0.1-SNAPSHOT.jar 


-------------war打包方式-------------

在web pom.xml中加入下面这句话,在  <artifactId>web</artifactId> 之后
<!-- 将packaging 值(默认jar) 调整成 war -->
<packaging>war</packaging>

并在web/src/main/下新建 webapp/WEB-INF/web.xml 文件

cd D:\JAVA_PROJECT\first-app-demo //回到项目根目录
mvn -Dmaven.test.skip -U clean package
会显示如下::::
Building war: D:\JAVA_PROJECT\first-app-demo\web\target\web-0.0.1-SNAPSHOT.war
cd web\target\
java -jar web-0.0.1-SNAPSHOT.jar



-------------maven插件方式运行-------------
cd D:\JAVA_PROJECT\first-app-demo
cd web 
mvn -Dmaven.test.skip -U clean install
mvn spring-boot:run

---------------war打包方式并在tomcat下运行----------------------------------------
在web pom.xml中加入下面这句话,在  <artifactId>web</artifactId> 之后
<!-- 将packaging 值(默认jar) 调整成 war -->
<packaging>war</packaging>

并增加tomcat依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

并在web/src/main/下新建 webapp/WEB-INF/web.xml 文件,不能为空
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>version</display-name>
</web-app>

修改启动文件,让其类集成 SpringBootServletInitializer,并重写configure方法

@SpringBootApplication
public class FirstAppDemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(FirstAppDemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(FirstAppDemoApplication.class, args);
}
}
cd D:\JAVA_PROJECT\first-app-demo //回到项目根目录
mvn -Dmaven.test.skip -U clean package
会显示如下::::
Building war: D:\JAVA_PROJECT\first-app-demo\web\target\web-0.0.1-SNAPSHOT.war
复制 web-0.0.1-SNAPSHOT.war 此文件到 tomcat/webapp下面
然后运行tomcat即可

jar包和war包的介绍和区别

1.jar包的介绍

JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。

JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。

2.war包的介绍

war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。

war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。

简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。

3.区别:(WAR文件代表了一个Web应用程序,JAR是类的归档文件。)

如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,这时可以将Web应用程序打包成Web 归档(WAR)文件,这个过程和把Java类文件打包成JAR文件的过程类似。利用WAR文件,可以把Servlet类文件和相关的资源集中在一起进行发布。在这个过程中,Web应用程序就不是按照目录层次结构来进行部署了,而是把WAR文件作为部署单元来使用。

一个WAR文件就是一个Web应用程序,建立WAR文件,就是把整个Web应用程序(不包括Web应用程序层次结构的根目录)压缩起来,指定一个.war扩展名。

要注意的是,虽然WAR文件和JAR文件的文件格式是一样的,并且都是使用jar命令来创建,但就其应用来说,WAR文件和JAR文件是有根本区别的。JAR文件的目的是把类和相关的资源封装到压缩的归档文件中,而对于WAR文件来说,一个WAR文件代表了一个Web应用程序,它可以包含 Servlet、HTML页面、Java类、图像文件,以及组成Web应用程序的其他资源,而不仅仅是类的归档文件。

那么什么时候应该使用WAR文件呢?在开发阶段不适合使用WAR文件,因为在开发阶段,经常需要添加或删除Web应用程序的内容,更新 Servlet类文件,而每一次改动后,重新建立WAR文件将是一件浪费时间的事情。在产品发布阶段,使用WAR文件是比较合适的,因为在这个时候,几乎不需要再做什么改动了。

在开发阶段,我们通常将Servlet源文件放到Web应用程序目录的src子目录下,以便和Web资源文件区分。在建立WAR文件时,只需要将src目录从Web应用程序目录中移走,就可以打包了。

4.部署war包到Tomcat

1). 我这里工作中一般是开发打war包给测试,比如说现在测试拿到一个war包,名字叫test.war。

2). 打开Tomcat的安装路径 ,假设是“D:\Tomcat\apache-tomcat-7.0.68”,然后进入到 webapps文件夹中,把 test.war放到 webapps文件夹。

3). 启动Tomcat。如果不需要更改配置文件:到这一步就可以了。在浏览器输入“http:localhost:tomcat_port/test即可打开test项目的 index.jsp页面(port是自己的端口号)。如果test项目没有index.jsp页面,那就需要打开其他相应的页面。如果需要更改配置文件:

4). 关闭 Tomcat。

5). 删除 test.war文件(如果在tomcat启动的状态下删去war包,解压好的文件夹也会被一并删除,所以需要在解压后停止tomcat, 然后删掉war包,这时再启动。这时项目文件夹就会被认为不是war解压而来。)。

6). 由于刚刚启动过Tomcat,Tomcat会自动解压缩test.war为 test文件夹。所以我们在webapps下面可以看到test文件夹。打开test文件夹更改配置文件即可。

7). 更新完配置之后,启动Tomcat。

8). 浏览器打开即可。


原文链接:https://www.jianshu.com/p/3b5c45e8e5bd


yii2设置默认时间时区(基础模板和高级模板)
基本模板
config/web.php
在$config中加入  'timeZone'=>'Asia/Shanghai',


高级模板
common/config/main.php
在return中加入  'timeZone'=>'Asia/Shanghai',


优惠券
广告位-淘宝
最新微语