分类目录归档:未分类

php字符串转义

addslashes() 函数

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

  • 单引号(’)
  • 双引号(”)
  • 反斜杠(\)
  • NULL

提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。

注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

向字符串中的预定义字符添加反斜杠:

<!DOCTYPE html>
<html>
<body>

<?php
$str = "Who's Bill Gates?";
echo $str . " This is not safe in a database query.<br>";
echo addslashes($str) . " This is safe in a database query.";
?>  

</body>
</html>

结果:

Who's Bill Gates? This is not safe in a database query.
Who\'s Bill Gates? This is safe in a database query.

小型软件开发团队至少需要哪些角色?

至少需要2种。

软件设计人员、软件开发人员。

软件设计,包括了软件的创意、盈利模式、结合用户需求设计模型、图片设计、页面设计、UI交互等。如果没有设计,直接开始编程,则写的时候不清晰,后期修改也会比较麻烦。(如果使用了很多时间去设计,那也不得不偿失的,说明设计能力低下,加强图片处理、前端页面编写、经济学、心理学等通常有帮助)

软件开发,这里包括了前端后端数据库等。

当然,如果你想自己做一个完整的软件,应该加强的就是设计和编码,至于测试、简单运维、和客户沟通需求等难度相对较小。

es指定字段不能被索引

指定不被索引,则也不可以作为搜索条件(主要用于指定非条件字段,节省索引空间)

在 mapping 中指定字段的 index : false 即可

PUT /test
{
  "mappings": {
    "test": {
      "properties": {
        "name1": {
          "type": "keyword",
          "index": false
        }
      }
    }
  }
}

如果在 query 中的搜索条件涉及了前面指定的不被索引的字段,则会报错。

es aggs分组

aggs分组语法

在query中指定aggs参数

{
  "aggs":{
    "price_group":{  // 命名随意
        "terms":{
           "field": "price"  //分组字段
        }
      }
  },
  "size": 0
}

使用 size: 0,表示不返回文档数据,以加快速度。

如果 terms 改为 avg,则表示求平均值。

es高亮显示

指定查询参数的 highlight 字段

POST /sms-logs-index/_search
{
  "query": {
    "match": {
      "smsContent": "魅力"
    }
  },
  "highlight": {
    "fields": {
      "smsContent": {}
    },
    "pre_tags": "<font color='red'>",
    "post_tags": "</font>",
    "fragment_size": 10
  }
}

在 height 字段中,有多个参数,fields 是指定高亮字段

其他三个省略时,则默认使用 em 标签包裹。(em表示强调文本)

  • fragment_size :指定高亮数据展示多少个字符回来;
  • pre_tag:指定前缀标签,如 <font color=”red”>
  • post_tags:指定后缀标签,如 </font>
  • field:指定那个字段为高亮字段
  • type:type字段允许强制使用特定的高亮策略。可以配置的参数:unified, plain and fvh

更多高亮参数:

参数说明
boundary_chars包含每个边界字符的字符串。默认为,! ?\ \ n。
boundary_max_scan扫描边界字符的距离。默认为20。
boundary_scanner指定如何分割突出显示的片段,支持chars, sentence, or word三种方式。
boundary_scanner_locale用来设置搜索和确定单词边界的本地化设置,此参数使用语言标记的形式(“en-US”, “fr-FR”, “ja-JP”)
encoder表示代码段应该是HTML编码的:默认(无编码)还是HTML (HTML-转义代码段文本,然后插入高亮标记)
fields指定检索高亮显示的字段。可以使用通配符来指定字段。例如,可以指定comment_*来获取以comment_开头的所有文本和关键字字段的高亮显示。
force_source根据源高亮显示。默认值为false。
fragmenter指定文本应如何在突出显示片段中拆分:支持参数simple或者span。
fragment_offset控制要开始突出显示的空白。仅在使用fvh highlighter时有效。
fragment_size字符中突出显示的片段的大小。默认为100。
highlight_query突出显示搜索查询之外的其他查询的匹配项。这在使用重打分查询时特别有用,因为默认情况下高亮显示不会考虑这些问题。
matched_fields组合多个匹配结果以突出显示单个字段,对于使用不同方式分析同一字符串的多字段。所有的matched_fields必须将term_vector设置为with_positions_offsets,但是只有将匹配项组合到的字段才会被加载,因此只有将store设置为yes才能使该字段受益。只适用于fvh highlighter。
no_match_size如果没有要突出显示的匹配片段,则希望从字段开头返回的文本量。默认为0(不返回任何内容)。
number_of_fragments返回的片段的最大数量。如果片段的数量设置为0,则不会返回任何片段。相反,突出显示并返回整个字段内容。当需要突出显示短文本(如标题或地址),但不需要分段时,使用此配置非常方便。如果number_of_fragments为0,则忽略fragment_size。默认为5。
order设置为score时,按分数对突出显示的片段进行排序。默认情况下,片段将按照它们在字段中出现的顺序输出(order:none)。将此选项设置为score将首先输出最相关的片段。每个高亮应用自己的逻辑来计算相关性得分。
phrase_limit控制文档中所考虑的匹配短语的数量。防止fvh highlighter分析太多的短语和消耗太多的内存。提高限制会增加查询时间并消耗更多内存。默认为256。
pre_tags与post_tags一起使用,定义用于突出显示文本的HTML标记。默认情况下,突出显示的文本被包装在和标记中。指定为字符串数组。
post_tags与pre_tags一起使用,定义用于突出显示文本的HTML标记。默认情况下,突出显示的文本被包装在和标记中。指定为字符串数组。
require_field_match默认情况下,只突出显示包含查询匹配的字段。将require_field_match设置为false以突出显示所有字段。默认值为true。
tags_schema设置为使用内置标记模式的样式。
type使用的高亮模式:unified, plain, or fvh. 默认为 unified。

Elasticsearch(ES) 查询指定返回字段

Elasticsearch(ES) API 允许在查询时指定返回字段,也就是仅仅返回部分字段。

按需索取,能够提高 Elasticsearch 的响应速度。

主要通过查询时 _source 字段指定

一、仅显示部分字段

例如,仅返回 commodity_id 和 commodity_name 字段

{
  "_source": [
    "commodity_id",
    "commodity_name"
  ],
  "query": {
    "query_string": {
      "query": "荣耀"
    }
  }
}

二、不显示原始字段

将 _source 设置为 false, 可以不显示任何字段,部分特殊场景下会用到。

{
  "_source": false,
  "query": {
    "query_string": {
      "query": "荣耀"
    }
  }
}

三、包含或排除某些字段

我们可以同时指定需要显示的字段的,和需要排除显示的字段:

{
  "_source": {
    "include": [
      "commodity_id",
      "commodity_name"
    ],
    "exclude": [
      "picture_url"
    ]
  },
  "query": {
    "query_string": {
      "query": "双卡"
    }
  }
}

倒序索引是什么?

正序索引结构:

文档1 --> 词汇1 , 词汇2 ....
文档2 --> 词汇3 ,词汇4 ....

文档找词汇,叫正序索引。

倒序索引,则反过来,一个词汇对应多个文档

词汇1 -->  文档1, 文档2 ...
词汇2 -->  文档3,  文档4 ...

倒序索引,通常用在全文检索中。