分类目录归档:未分类

javaScript设置元素总是滚动到底部

原生JS的写法:

var ele = document.getElementById('id');
ele.scrollTop = ele.scrollHeight;

其中 scrollHeight 就是最高的高度,把高度传递给 scrollTop 就可以了。

Jquery的写法:

$(“#box”).scrollTop() , 如果方法中传递参数,则为设置高度,否则为获取

let scrollHeight = $(‘#box’).prop(‘scrollHeight’); ,注意不能使用 attr

input file 指定文件后缀

使用 input 标签属性:(多种文件用 , 分隔)

<input type="file" id="file"
  accept=".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document">

使用 js 限定,使用字符串的 endWith 方法即可

    let files = this.files[0]; //获取file组件中的文件
    let name = files.name; //文件名
    let size = files.size; //文件大小
    if (s.endsWith(".txt")) {  // 合法
        document.write(1);
    } else {
        document.write(2);  // 不合法
    }
    let formData = new FormData();  // 发送ajax请求
    formData.append('file', files);
    $.ajax({
        type: "POST",
        url: "?action=upload",
        data: formData,
        contentType: false,
        processData: false,
        success: function(r) {
            r = $.parseJSON(r)
        }
    })

elasticsearch 模糊匹配和精准匹配

针对 text 字段:

使用 match 时,为模糊匹配,会分词

使用 match_parse 时,会分词,但必须包含所有关键字、且顺序相同。

match_parse_prefix 与match_phrase查询类似,但是会对最后一个Token在倒排序索引列表中进行通配符搜索。Token的模糊匹配数控制:max_expansions 默认值为50。我们使用

term 查询为精准查询,不分词。

另外,如果存储时进行了分词,则查询时即使用了term也无法匹配正确的数据。

对于keyword字段,默认都是精准匹配,即使match也是如此,如果需要模糊匹配,则可以使用通配符,例如:*abc* ,则包含 abc 的字段都会被查询出来。

php配置文件的几种格式

php配置文件都存储在.php文件中

变量名格式:

$a = 'abc';
$b = 'def';

变量名格式,在使用时,直接把文件包含进来即可,适用于变量名冲突少的情况,或在定义时就避免同名。

一维数组形式:

return array('a'=>1,'b'=>2);

一维数组,多用于循环等批量操作。

二维数组格式:

return array(
    'user'=>[
        'name'=>'a',
        'pwd' => 'b'
    ]
);

二维数组,可直接整个注册给前端,比如 smarty,可使用 $config.user.name,或整个转 json返回给前端。

根据配置变量的数量多少,选择格式的格式:

  • 配置项极少,用变量名
  • 配置项目一般,用一维数组
  • 配置项较多,用二维数组

综合来说,注意变量名的命名,进行分组,每组加前缀,操作时用循环批量操作。

php 双问号表达式 ?? 和 ?:

php两个问号 ??是php7新推出的表达式,

c = a ?? b;

表示如果a非空,则c = a,

如果a为空,则 c = b;

php7以前经常使用到三元运算表达式,

$page = isset($params['page']) ? $params['page'] : 1;

现在使用双问号表达式就行了

$page = $params['page'] ?? 1;

但是由于它是 isset,如果传递了空字符串,则导致 page 得到一个空字符串,如果希望为整数,且不为0,则不能使用 ?? ,而使用 ?:

$page = (int)$params['page'] ?: 1;

这里的 ?: 是php5.3的语法,也就是 $a ? $a : 1,是三元表达式的缩写。

简记: ?? 判断是否存在(不为null), ?: 判断是否为空。

一般来说,使用 ?: 赋默认值,如果允许传递空(比如 0或 空字符串),则使用 ?? 赋默认值。

ElasticSearch简单查询

无查询条件,只需指定index:

GET /index_name/_search
{
    "query": {
        "match_all": {}
    }
}

分页查询,指定 from 从哪条记录开始,size 指定当前页大小,和 mysql 的 limit m, n 很像,例如:

GET /index_name/_search
{
    "query": {
        "match_all": {}
    },
    "from": 1,
    "size": 2
}

匹配某个项,类似 mysql 的 like ,例如:

POST index_name/_search
{
  "profile": true, 
  "query": {
    "match": {
      "content": "小手机"
    }
  }
}

参数说明:profile 参数为true时,返回查询时的分析信息,比如“小手机”会被解析为“小手”、“手机”并匹配包含这些关键字的记录,如果没有 profile,则只返回匹配到的结果,而不存在分析。

查询结果列表,封装在响应对象的子对象 hits 中,而它是一个类似传统的分页对象,包含了分页信息与记录列表,记录列表默认以匹配度(_score)属性倒叙排序,也就是默认情况下匹配度越高,排在前面。

自定义排序

自定义字段排序,支持多个字段,功能类似sql中的 order by a1 desc, a2 desc… ,因为自定义数据可能为null,一般推荐把 _score 加上

POST index_name/_search
{
  "profile": true, 
  "query": {
    "match": {
      "content": "小手机"
    }
  },
  "sort": [
    {
      "publish_time": {
        "order": "desc"
      }
    },
    {
      "_score":{
        "order": "desc"
      }
    }
  ]
}

限定查询时间

在查询的响应对象中,第一个字段就是 took 字段,表示本次查询占用多少毫秒。

如果我们指定了 timeout 字段限定查询时间为 n 毫秒后,到达该时间还未查询完毕则停止查询并携带已查询到的结果返回。

POST index_name/_search
{
  "profile": true, 
  "query": {
    "match": {
      "content": "手机"
    }
  },
  "timeout": "1ms"
}