精华内容
下载资源
问答
  • django 模型计算字段

    千次阅读 2016-01-19 01:23:31
    可以计算字段modelAdmin models.py class Person(models.Model):  family_name= models.CharField(max_length=20, verbose_name='姓')  given_name = models.CharField(max_length=...

    models.py

    class Person(models.Model):

        family_name= models.CharField(max_length=20, verbose_name='姓')

        given_name = models.CharField(max_length=2 0, verbose_name='名')

        def name(self):  # 计算字段要显示在修改页面中只能定义在只读字段中(否则不显示):readonly_fields = ('sc',)
            return '%s,%s' % (self.family_name, self.given_name)

        name.short_description = '全名'  # 用于显示时的名字 , 没有这个,字段标题将显示'name'

        def __str__(self):

            return "%s %s " % (self.family_name, self.given_name)


    admin.py


    class PersonAdmin(admin.ModelAdmin):

        readonly_fields = ('name',)


    admin.site.register(Person, PersonAdmin)


    _____________________________________________________________________________________________

    也可以把计算字段写在modelAdmin中

    models.py

    class Person(models.Model):

        family_name= models.CharField(max_length=20, verbose_name='姓')

        given_name = models.CharField(max_length=2 0, verbose_name='名')


        def __str__(self):

            return "%s %s " % (self.family_name, self.given_name)



    admin.py


    class PersonAdmin(admin.ModelAdmin):

        
        def name(self,obj):  

            # 这个方法会得到两个参数,第一个是类本身的一个实例(app.PersonAdmin),第二个是这个类管理的模型实例(Person)

            return '%s,%s' % (self.family_name, self.given_name)


        name.short_description = '全名'  # 用于显示时的名字 , 没有这个,字段标题将显示'name'

        readonly_fields = ('name',)


    admin.site.register(Person, PersonAdmin)


    展开全文
  • 第十章 创建计算字段  计算字段  存储的数据一般不是应用程序所需要的格式。我们需要直接从数据库检索出转换、计算或格式化的数据。...计算字段是运行时SELECT 语句创建的。  需要注意的是,只
    第十章  创建计算字段
        计算字段
            存储在表中的数据一般不是应用程序所需要的格式。我们需要直接从数据库中检索出转换、计算或格式化的数据。而不只是检索出数据,然后再到应用程序或报告程序中区格式化。
            这就发挥了计算字段的作用了。与前面的字段不同,计算字段并不实际存在于数据库中。计算字段是运行时在SELECT 语句中创建的。
            需要注意的是,只有SELECT语句知道那些列是实际列,哪些列不是,客户机的角度来看,计算字段和其他字段是一样的。
        拼接字段
        拼接:将值联结到一起构成单个值。
            生成供应商  columnOne(columnTwo)  的格式
            SELECT Concat(columnOne, '(' , columnTwo, ')') FROM table ORDER BY columnOne;
        使用别名
             别名使用AS关键字赋予
        执行算术运算
            另一常见的用途就是对检索出来的数据进行算术运算。
            例如:检索出column_id 为2005的columnOne乘以columnTwo的值
            SELECT column_id, columnOne, columnTwo, columnOne*columnTwo AS column_price FROM table WHERE column_id = 2005
        操作符   + - *  /
            SELECT 3*2;将返回6
            SELECT Now(); 返回当前的日期和时间

    第十一章 使用数据处理函数
        SQL实现了一下类型的函数
            1 用于处理文本串,如删除、填充、装换大小写
            2 用于数据上进行的算术操作,如返回绝对值,进行代数运算
            3用于处理日期和时间值并从这些值中提取特定的成分,如返回两个日期差,检查日期有效性
            4 返回DBMS正使用的特殊信息 ,如用户登录信息,检查版本细节信息
        文本处理函数
            Upper()  将文本转换为大写
            SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;
        常用的文本处理函数
            Left()             返回串左边的字符
            Length()         返回串的长度
            Locate()         找出串的一个子串
            Lower()         将串转换为小写
            Right()           返回右边的字符
            Soundex()      返回串的SOUNDEX值
            SubString()     返回串的字符
            Upper()          将串转换ewing大写
               Soundex()是一个将任何文字串转换为描述语音表示的字母数字模式的算法。他考虑了类似发信字符和音节,使得能对串进行发音的比较而不是字母比较,如:Y.lee搜索可以匹配Y.lie
            SELECT cust_name , cust_contact  FROM customers WHERE Soundex(cust_contact) = Soundex('Y Lie')
        删除多余空格的函数
            RTrim()   LTrim()   Trim()  依次是删除 右边  左边  两边的空格
            SELECT Concat(RTrim(vend_name), '( ' ,RTrim(vend_country), ') FROM vendors ORDER BY vend_name;
     
        日期和时间处理函数
            日期和时间常用相应的数据类型和特色的格式存储,以便能快速和有效的排序或过滤,并节省物理存储空间。
            AddDate()      增加一个日期  天、周等   
            AddTime()      增加一个时间  时、分等
            CurDate()       返回当前日期
            CurTime()      返回当前时间
            Date()            返回日期时间的日期部分
            DateDiff()      计算两个日期之差      
            Date_Add()     高度灵活的日期或时间串   
            Date_Format()       返回一个格式的日期或时间串   
            Day()             返回一个日期的天数部分
            DayOfWeek() 对于一个日期,返回对于星期几
            Hour()            返回一个时间的小时部分
            Minute()         返回一个时间的分钟部分
            Moth()           返回一个日期的月份部分
            Now()            返回当前的日期和时间
            Second()        返回一个时间的秒部分
            Time()           返回一个日期时间的时间部分
            Year()            返回一个日期的年份部分
            MySQl日期格式必须为yyyy-mm-dd,如2010-05-03。虽然其他日期格式也行,但这是首选格式,因为他排除了多义性。
            例如,存储的日期列中的日期是2010-11-05 15:23:05 如果想找出2010-11-05这天的数据,使用前面的语句就不行了。这是要使用Date()函数指示mysql提取列的日期的部分
            SELECT cust_id, order_num FROM orders WHERE Date(order_date) = '2010-11-05';
            检索出2005-5月份的订单怎么办呢?可以使用BETWEEN
            SELECT cust_id,order_num FROM orders WHERE Date(order_date) BETWEEN '2005-05-01' AND '2005-05-30';
            还有一种不需要记住天数的函数Month(),使年份相等,再让月份相等就行了
            SELECT  cust_id,order_num  FROM orders WHERE Year(order_date) = 2005 AND Month(order_date) = 5;
     
        数值处理函数
            Abs()             返回一个数的绝对值
            Cos()             返回一个角度的余弦
            Exp()             返回一个数的指数值
            Mod()             返回除操作的余数
            Pi()              返回圆周率
            Rand()            返回一个随机数
            Sin()             返回一个角度的正弦值
            Sqrt()            返回一个数的平方根
            Tan()             返回一角度的正切

    第十二章 汇总函数
    Msyql提供这些函数以便分析和报表生成,这种类型的检索例子有以下几种:
        汇聚函数  :运行在行组上,计算和返回单个值的函数
            1 确定表中的行数(或者满足某个条件或包括某个特定的值的行数)
            2 获得表中行组的和
            3 找出表列(或所有行或某特定行的)最大值、最小值和平均值
        AVG()            返回某列的平均值
        COUNT()          返回某列的行数
        MAX()            返回某列的最大值
        MIN()            返回某列的最小值
        SUM()            返回某列值之和
        求products表中产品的平均价格
            SELECT AVG(prod_price)  AS avg_price FROM products;
        求products表中编号为1003产品的平均价格
            SELECT AVG(prod_price)  AS avg_price FROM products WHERE vend_id = 1003;
        AVG()函数只能用来确定特定数值列的平均值,而且名必须作为函数参数给出。为了获得多个平均值,必须使用多个AVG()函数,AVG()函数忽略列值为NULL的行
        COUNT()函数的两种使用方式:
            1 COUNT(*) 对表中的数目进行计数,不管表列中包含的是NULL值还是非空值
            2 COUNT(column) 对特定的列中具有值的进行计数,忽略NULL值
            SELECT COUNT(*) AS num_cust FROM customers;
            SELECT COUNT(cust_email) AS num_cust FROM customers;
        MAX()函数  ,忽略列值为NULL的行
            SELECT MAX()  AS max_price FROM products;
        MIN()  与MAX()函数一样
        SUM() 函数
            SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num = 2005
        下面是mysql5以后的函数  在mysql4中不能正常运行
        DISTINCT  参数,作用是返回不相同的值
        下面是返回供应商提供的产品的平均值,它与上面的SELECT 语句相同,但使用了DISTICT参数,因此平均值只考虑各个不同价格合起来的平均值
            SELECT AVG(DISTINCT prod_price)  AS avg_price FROM products WHERE vend_id=10003;
        如果指定了列名,DISTINCT参数只能用于COUNT(),DISTINCT参数不能用于COUNT(*)应为DISTINCT必须使用列名。

    第十三章  分组数据
        分组允许把数据分成多个逻辑组,比便能对每个组进行聚集计算。
        分组是在SELECT 语句的 GROUP BY 子句中建立的。
        返回每个厂商提供了几个产品
        SELECT vend_id, COUNT(*)  AS num_prods FROM products  GROUP BY vend_id;
        GROUP BY 一些重要规定
            1 GROUP BY        子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供了更细致的控制
            2 如果在GROUP BY   子句中嵌套了分组,数据将在最后规定的分组上进行汇总,换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别列取回数据)
            3 GROUP BY        子句列出的每个列都必须是检索列或有效的表达式,(但不能是聚集函数)如果。在SELECT 中使用了表达式,则必须在GROUP BY 子句中指定相同的表达式,不能使用别名。
            4 除聚集计算语句外,SELECT 语句中的每个列都必须在GROUP BY 子句中给出
            5 如果分组列中具有NULL值,不管一个或多个都将作为一个分组返回
            6 GROUP BY 子句必须出现在WHERE 子句之后,GROUP BY 子句之前
     
        过滤分组
            如想要得到大于3的不同产品订单
            WHERE 是过滤指定的行而不是列。 HAVING 支持所有 WHERE 操作符。
            SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >3;
            WHERE 是在分组前进行过滤, HAVING 是在分组后进行过滤
        分组和排序区别
            ORDER BY                       GROUP BY
            排序产生的输出                  分组行,单输出可能不是分组的顺序
            任意列都可以使用(甚至    只可能使用选择列或表达式,而且必须使用每个选择列表达式
            是分选择列也可以使用)    如果与聚集哈思楠一起使用列(或表达式)则必须使用
            不一定需要
        例子:检索总计订单价格大于50的订单号和总计订单
        SELECT order_num , SUM(quantity* item_price)  AS ordertotal  FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >= 50;
        按订单价格进行排序 ,后面加 ORDER BY ordertotal;
     
        SELECT 子句顺序
            SELECT         要返回的列或表达式
            FROM           从中检索数据的表
            WHERE         行级过滤
            GROUNP BY  分组说明
            HAVING         组级过滤
            ORDER BY    输出排序顺序
            LIMIT           要检索的行数

    第十三章  使用子查询
     
        Sql还允许使用子查询,即嵌套在其他查询中的查询。
        利用子查询进行过滤
            SELECT cust_id FROM orders WHERE order_num IN(
            SELECT order_num FROM orderitems WHERE prod_id = 'TNT2'
            )
            可以把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE 子句
            格式化sql    包含子查询的sql语句难以阅读,可以使用适当的缩进。
            得到了订购物品TNT2的所有客户ID,下一步是检索这些客户的信息,总语句是
            SELECT cust_name , cust_contact  FROM  customers WHERE cust_id IN(
        SELECT cust_id FROM orders WHERE order_num IN  (
        SELECT order_num FROM orderitems WHERE prod_id = 'TNT2'
        )
            )
            列必须匹配 在WHERE子句中使用子查询,应该保证SELECT语句具有WHERE 子句中相同数目的列。通常子查询将返回的单个列于单个列匹配,但如果需要也可以多个列。
            虽然子查询一般与IN操作符结婚使用,但也可以用于测试等于、不等于等符号
     
        作为计算字段使用子查询
           使用子查询的另一个方法是创建计算字段。
           假设需要显示sustomers表中每个客户的订单总数。
            SELECT cust_name ,cust_state,(
            SELECT COUNT(*) FROM orders WHERE orders,coust_id = customers . Cust_id
            ) AS orders FROM customers ORDER BY cust_name;
    展开全文
  • Elasticsearch 7.9 ,我们将引入一种的 “wildcard” 字段类型,该字段类型经过优化,可字符串值快速查找模式。这种字段类型采用了一种全新的方式来索引字符串数据,从而解决了日志和安全性数据...

    在 Elasticsearch 7.9 中,我们将引入一种新的 “wildcard” 字段类型,该字段类型经过优化,可在字符串值中快速查找模式。这种新的字段类型采用了一种全新的方式来索引字符串数据,从而解决了在日志安全性数据中高效索引和搜索的最佳实践。根据你现有的字段用法,通配符可以提供:

    • 更简单的搜索表达式(无需将 AND /单词/短语组合在一起)
    • 更简单的索引编制(无需定义分析器选择)
    • 不再有的缺失值
    • 更快的搜索
    • 更少的磁盘使用

    这种新数据类型最令人兴奋的功能是简化了部分匹配。使用通配符,你不再需要担心文本模式在字符串中的位置。只需使用常规查询语法进行搜索,Elasticsearch 就会在字符串中的任何位置找到所有匹配项。没错,我们完成了所有这些操作,而无需您更改查询语法。

    当涉及字符串值的部分匹配时,通配符数据类型解决了安全性领域中那些人指出的问题,但在可观察性及其他方面具有应用程序(如下所述)。尤其是,希望搜索计算机生成的日志的用户应发现此新字段类型比现有选项更自然。

    在此博客中,我们将介绍如何做到这一点,以及如何从通配符字段中获得最大收益。让我们来看看。

    索引字符串的现有选项

    直到7.9,在搜索字符串时,Elasticsearch 大致提供了两种选择:

    • text fields
    • keyword fields

    文本字段将字符串 “tokenize” 为多个 token,每个token 通常代表单词。搜索 quick foxes 的搜索者因此可以匹配谈论 quick brown fox 的文章。

    keyword 字段通常用于较短的结构化内容,例如国家/地区代码,无需分析即可将其编入索引作为单个 token。然后,分析师可以使用这些数据,比如,运用 aggregation 可视化受欢迎的度假胜地等。

    如果没有用户明确的映射选择,Elasticsearch 的默认索引模板假定 JSON 文档中显示的字符串值应同时索引为 text 字段和 keyword 字段。目的是,如果字符串表示应该被切成多个单词 token 以进行搜索的散文,或者当被用于 “热门目的地”条形图中展示时应作为单个结构化值(例如城市名称 “New York”)。

    文字和关键字字段不足时

    对于 text 或 keyword 字段效果不佳的字符串内容,我们不必走得太远。 Elasticsearch 自己的日志文件产生的消息不能很好地适合任一类别。让我们检查一下原因。

    每个 Elasticsearch 日志文件条目都遵循记录事件的经典最低要求- timestam 和 message。记录的 message 用于以半结构形式描述各种事件,例如:

    • 正在创建或删除的索引
    • 服务器加入或离开集群
    • 资源压力警告
    • 具有长堆栈跟踪的详细错误消息

    上面是一个已记录事件的示例。上面高亮显示的是我想搜索以查找类似记录错误的消息部分。那将是在文本编辑器中的简单 “Cmd / Ctrl-F” 键按下,但是使用 Elasticsearch 并不是那么简单。请记住,Elasticsearch 是很容扩展的,因此 Ctrl-F 非常适合小的文本文件,但不适用于TB级数量的日志。需要某种索引才能快速搜索。

    将消息记录为 text 字段

    如果我们将消息内容索引为 text 字段,则最终用户将立即遇到翻译问题。选定的子字符串是“ NodeNotConnectedException:[54b_data_2]”,但关键的问题是 “索引中该如何表示”?

    • 是半个 token 吗?
    • 一个 token?
    • 一个半 token?
    • 二个?两个半? ...

    之所以会出现这个谜,是因为与英语文本(例如“quick brown fox”)不同,我们不知道单词在日志消息中的开头或结尾的位置,例如上面显示的堆栈跟踪。这不是人类自然会讲的语言,因此很容易意外地仅选择单词的一部分。

    match 查询可以帮助用户规避必须知道选择中的:or [ or _ 字符是单词标记的一部分还是仅用于拆分单词。但是,match 查询将无助于知道我们选择的开始或结束是否会裁剪掉完整的 token。如果分析器的选择保留 Java 包名中的逗点 .,我们将不得不使用昂贵的通配符搜索 *NodeNotConnectedException 或向后退选择以添加前面的 org.elasticsearch.transport. 到我们的 “match” 查询中的字符中。

    即使对于有经验的 Elasticsearch 开发人员,构造一个尊重 tokenization 策略的查询也是一个巨大的挑战。

    将消息记录为 keyword 字段

    keyword 字段对于如何存储索引内容的奥秘要少得多,它是一个字符串,我们可以使用单个正则表达式或通配符表达式来匹配字段值内的任意片段(例如我们的搜索字符串)。

    为用户简化了搜索,但是执行过程存在两个主要问题:

    • 搜索速度
    • 缺失数据

    如果像我们的搜索一样,我们正在字符串中间搜索某些东西并且有许多唯一值,则搜索速度会非常慢。尽管关键字字段已建立索引,但这是一个错误的数据结构。一个例子就是研究人员尝试在词典中查找所有带有 “oo” 的单词。他们必须扫描从 A 到 Z 的每一页上的每个单词,才能找到 “afoot” 到 “zoo” 的值。从本质上讲,keyword 字段与每个唯一值有关,而索引对于加快此过程没有任何帮助。使事情变得更加困难的是,如果日志消息像 Elasticsearch 产生的那样包含诸如时间和内存大小等变量,则日志消息通常会产生许多唯一的字符串值。

    keyword 字段的另一个大问题是它不能处理很长的字段。默认的字符串映射将忽略长度超过256个字符的字符串,并从索引术语列表中静默删除值。 Elasticsearch 的大多数日志文件消息都超过了此限制。

    即使你确实提高了 Elasticsearch 限制,也不能超过单个 token 的 32k 硬 Lucene 限制,并且 Elasticsearch 当然会记录一些超出此限制的消息。

    这对于我们的日志记录来说是一个盲点,这是不希望的,在某些安全情况下是不可接受的。

    引入新的 wildcard 字段

    为了解决这些问题,我们有一个新的 wildcard 字段,该字段擅长在任意字符串值的中间查找任何模式。

    • 与 text 字段不同,它不会将字符串视为由标点符号分隔的单词的集合。
    • 与 keyword 字段不同,它可以快速地搜索许多唯一值,并且没有大小限制。

    这个是怎么工作的呢?

    详细的模式匹配操作(例如通配符或正则表达式)在大型数据集上运行可能会非常昂贵。加快这些操作的关键是限制应用这些详细比较的数据量。

    新的 wildcard 字段使用以下两种数据结构以这种方式自动加速通配符和正则表达式搜索:

    • 字符串中所有3个字符序列的  n-gram” 索引
    • 完整原始文档值的 “二进制 doc value” 存储

    基于来自搜索字符串的匹配 n-gram 片段,第一种结构用于提供候选对象的快速但粗略的缩小。

    第二个数据结构用于通过自动查询验证由 n-gram 语法匹配产生的匹配候选。

    wildcard 例子

    安全分析人员可能会对查找黑客可能提到 “shell” 一词的任何日志消息感兴趣。 给定通配符查询 “*shell*”,通配符字段会自动将此搜索字符串拆分为3个字符的 n-gram,从而创建与 Lucene 查询等效的内容:

    she AND ell

    这样可以减少我们需要考虑的文档数量,但可能会产生一些误报-例如 包含字符串的文档:

    /Users/Me/Documents/Fell walking trip with Sheila.docx

    显然,搜索字符串越长,产生的误报就越少。 例如,搜索 “* powershell.exe*” 将产生更具选择性的 n-gram 查询

    pow AND wer AND rsh AND hel AND l.e AND exe

    消除任何误报是必不可少的完成阶段,因此 wildcar 字段将对由粗糙的 n-gram 查询产生的所有匹配项进行此检查。 这是通过从 Lucene 二进制 doc value 存储中检索完整的原始值,并对完整值运行通配符或 regexp 模式来完成的。

    Regexp 例子

    正则表达式更为复杂,并且可以包含值路径的选择,例如 此搜索对 DLL 或 EXE 文件的引用:

    .*\.(dll|exe)

    为了加速这种查询,将表达式解析为使用布尔逻辑排列的 n-gram 语法:

    (.dl AND ll_) OR (.ex AND xe_)

    请注意,在此示例中,_ 字符用于显示在何处添加了不可打印的字符以标记索引字符串的结尾。

    正则表达式及区分大小写

    我们知道安全分析师已经调整了他们的 Elasticsearch 正则表达式搜索以使用混合大小写表达式,例如在搜索对 cmd.exe 的引用时无论他们将写哪种大小写:

    [Cc][Mm][Dd].[Ee][Xx][Ee]

    wildcard 字段可识别这些混合大小写的表达式,并且将优化上述表达式的粗略查询,使其等效于此 Lucene 查询:

    cmd AND d.e AND exe

    (请注意,用于加速查询的 n-gram 索引始终为小写)。

    在索引字段中使用 wildcard 字段的内容时,在 keyword 字段上使用这些大小写混合的现有安全规则应运行得更快。

    但是,这些表达式看起来仍然很难看,很难编写,因此在将来的 Elasticsearch 版本中,我们还希望在 regexp 查询中引入区分大小写的标志,可以将其设置为 “false” 以使查询不区分大小写。 从本质上来说,它将搜索 abc 搜索 [Aa] [Bb] [Cc],而无需用户写所有这些方括号。 最终结果将是更简单,更快速的规则。

    与 keyword 字段比较

    keyword 字段的一个主要目标是在可行的情况下替代 keyword 字段。 我们一直努力确保它对所有查询类型产生相同的结果-尽管有时 wildcard 会更快,有时会更慢。 该表应有助于比较两个字段:

    1. 从32个压缩块中检索 doc value 时速度稍慢
    2. 有点慢,因为与 n-gram 的近似匹配需要验证
    3. keyword 字段仅访问每个唯一值一次,而 wildcard 字段则评估每个值的发音
    4. 如果启用了 “allow expensive queries” 设置
    5. 它取决于通用前缀-keyword 字段具有基于通用前缀的压缩,而 wildcard 字段则是整值 LZ4 压缩
    6. 内容会有所不同,但测试索引网站日志需要499秒,而 keyword 是365秒

    下一步是什么

    为了使搜索和分析应用程序可以考虑到越来越多的字段类型列表,从而简化了工作,我们简化了索引描述字段功能 API 中字段的方式。功能上与关键字字段等效的物理字段(例如 wildcard 和 constant_keyword)现在将自己描述为属于 keyword 家族。引入类型意味着将来可以进行其他字段类型分组,并且可以采用它们,而下游客户端应用程序无需了解新的物理字段类型。只要它们的行为与同一家族的其他成员相同,就可以在不更改客户端应用程序的情况下使用它们。

    弹性通用模式(ECS)为流行的数据字段定义了标准化的索引映射。

    在7.9中,尚未将 ECS 更新为使用 wildcard 字段,但是在将来,我们可以期望将几个高基数 keyword 字段切换为使用通配符字段。发生这种情况时,客户端应用程序通常不需要因此而进行任何更改,而应受益于更快的搜索。

    听起来不错,代价是什么呢?

    像往常一样,答案是“取决于”。 存储成本主要取决于字段数据的重复级别。 对于大多数唯一值,存储成本实际上可以比使用 keyword 字段的存储成本低。 这是因为我们增加了 Lucene 来压缩用于访问原始内容的二进制 doc value 存储。

    我们测试了一个包含200万个 Weblog 记录的示例数据集,其中文件中的每一行都被索引为一个字段中包含的单个值。 使用关键字字段的索引为 310MB,但由于压缩,使用新通配符字段的等效索引为 227MB。 不可否认,时间戳有助于确保每个文档的值都是唯一的,但是URL,IP地址和用户代理的组合也可以导致许多唯一的字符串。

    摘要备忘单-我什么时候应该使用通配符字段?

    我们认识到以上所有内容都需要考虑很多,因此下面给出了适合使用通配符字段的粗略指南。

    动手实践

    讲了这么多,那么我们该如何使用这个 wildcard 的新数据类型呢?接下来,我们使用一个例子来进行展示。打开我们的 Kibana (记得安装 Elastic Stack 7.9),并打入如下的命令:

    PUT my-index-000001
    {
      "mappings": {
        "properties": {
          "my_wildcard": {
            "type": "wildcard"
          }
        }
      }
    }

    在上面,我们定义了一个叫做 my_wildcard 的字段。它的数据类型是 wildcard。接着我们创建如下的文档:

    PUT my-index-000001/_doc/1
    {
      "my_wildcard" : "This string can be quite lengthy"
    }

    我们使用如下的方法来进行搜索:

    GET my-index-000001/_search
    {
      "query": {
        "wildcard": {
          "my_wildcard": "*quite*lengthy"
        }
      }
    }

    上面的搜索显示的结果是:

    {
      "took" : 6,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 3.8610575,
        "hits" : [
          {
            "_index" : "my-index-000001",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 3.8610575,
            "_source" : {
              "my_wildcard" : "This string can be quite lengthy"
            }
          }
        ]
      }
    }

    展开全文
  • 基本上与列的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常用于在计算字段的连接上。 拼接字段 拼接是将值联结到一起构成单个值。 MySQL的SELECT语句可以使用Concat() 函数来拼接一个或...

    字段

    基本上与列的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常用于在计算字段的连接上。

    拼接字段

    拼接是将值联结到一起构成单个值。

    在MySQL的SELECT语句中,可以使用Concat() 函数来拼接一个或多个列多数DBMS使用 加号(+)或 双竖线(||)来实现拼接,拼接时各个串之间用逗号(,)分隔

    语法:

    SELECT Concat(字符串1或列名,字符串2或列名,…)
    FROM 表名;  

    返回结果为连接参数产生的字符串,如有任何一个参数为NULL ,则返回值为 NULL。

    注意:如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 CAST,例如:

    SELECT Concat(CAST(数字型 AS 字符型), 字符串或列名,……);

    语法举例:

    将city表中的 id 列和 name 列联结在一起,并对其进行字符串联结,按照 name 列进行升序排序输出所有信息结果。

    SELECT CONCAT(ID,'(',`Name`,')')
    FROM city
    ORDER BY `Name`;

    执行算术计算

    计算字段的另一常见用途是对检索出的数据进行算术计算。

    常见算术操作符:加(+)、减(-)、乘(*)、除(/)

    注意:用圆括号(( ))来区分优先级顺序。

    语法:

    SELECT 列名1 算术操作符 列名2 算术操作符……
    FROM 表名;

    注意:列名也可以与任何数值进行算术计算。

    语法举例:

    将city表中 sumPrice列 的各个值乘以2,并输出所有算术计算后的信息结果。

    SELECT sumPrice * 2
    FROM city;

     

    展开全文
  • ArcGIS中为Shapefile属性表增加字段

    千次阅读 2010-04-06 16:54:00
    创建的属性表或是向已有的属性表中增加字段的时候,必须指明数据类型和字段属性,比如精度(Precision)或长度(Length)。数据类型的选择和相关设置会影响存储和显示,并且对后台数据库的精度和效率有十分重要...
  • MySQL 8.0 特性之隐藏字段

    千次阅读 2021-02-17 21:41:47
    MySQL 8.0.23 版本增加了一个的功能:隐藏字段(Invisible Column),也称为不可见字段。本文给大家介绍一下 MySQL 隐藏字段的相关概念和具体实现,包括如何创建隐藏字段查询隐藏字段、如何查看隐藏字段相关的...
  • 我的操作需求: 1、查询出的结果,加一个自定义的字段和数据? SELECT * , 100 as ccFROM tab; # 增加cc字段 值是100 ...3、查询出的结果,在查询出的数据的基础上修改数据的值? 4、mysql查询结果nu...
  • SQL 数据库,生成列(Generated Column)是指由表其他字段计算得到的列,因此也称为计算列(Computed Column)。 本文介绍各种主流数据库对于生成列/计算列的实现,包括 Oracle、MySQL、SQL Server、...
  • 执行计划字段各模块描述

    万次阅读 2011-10-10 17:27:33
    SQL语句的执行计划,包含很多字段项和很多模块,其不同字段代表了不同的含义且不同的情形下某些字段、模块显示或不显示,下面的描述给出了执行计划字段的含义以及各模块的描述。 有关执行计划字段...
  • mysql如何使用合适的字段字段长度

    万次阅读 多人点赞 2018-11-11 20:40:33
    下面是mysql一个字段中含有哪些信息 ...1、整数型的数值类型已经限制了取值范围,有符号整型和无符号整型都有,而M值并不代表可以存储的数值字符长度,它代表的是数据显示时显示的最小长度; 2、当存储...
  • 文章目录1.... Tableau字段操作3.1 合并字段3.2 字段分层3.3 字段分组3.4 字段拆分3.5 计算字段3.6 集4. Tableau函数与计算4.1 Tableau的运算符4.2 Tableau函数(1)数字函数(2)字符串函数(...
  • 5G NR DCI的各控制字段

    万次阅读 2019-07-03 16:37:41
    PDSCH从该字段中获取频域资源分配信息。PDSCH的资源分配类型有两种Type0和Type1。 Type0是非连续的资源分配类型,Type1是连续的资源分配类型。 对于Type0,PDSCH从频域资源分配指示字段即DCI-RIV获取的即为...
  • Excel Vlookup 函数可以进行多列作为条件的关联,但已经需要高级操作技巧, Power Query (PQ) 实现则非常简单,方法基本上和上一篇一样。 我设计了一个假想的案例:假设公司有两个仓库 #1002 和 #2001,销售...
  • 说明: 通过动态参数获取字段数据... 透明表 FAGLFLEXT用于总账总计,每个月的增加减少额都分别用TSL01,TSL02…… TSL16(16列)记录下来,这些字段是有规则的,可以通过动态字段方便的获取其数据。 例子...
  • 1. 概述 ...结合wireshark学习TCP/IP协议帧,IP包,TCP包的包结构及字段意义 序列号和确认号 TCP的窗口机制和可用窗口大小协商机制 2. 帧 网络上,单次传输的数据量是有限。传输数据时,...
  • 字段类型与合理的选择字段类型

    千次阅读 2017-01-12 23:04:26
    本篇博客稍微有点长,它实际上包括两个内容:一是mysql字段类型的介绍,二是mysql建表过程是如何正确选择这些字段类型; 字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是...
  • 前言:我们经常会遇到系统标准的数据源,或者我们自建的数据源无法满足要求的情况,这个时候数据源添加几个相关的字段,可能就能满足我们的要求,这个时候就要用到数据源的增强。下面介绍的两种增强方法都是发生...
  • elasticsearch 基础 —— 字段数据类型

    千次阅读 2018-07-26 11:53:48
    用于统计做了标记的字段的index数目,该值会一直增加,不会因为过滤条件而减少。 mapper-murmur3 类型:通过插件,可以通过  murmur3  来计算 index 的 hash 值; 附加类型(Attachment datatype):采用  ...
  • mysql查询中使用自定义变量和条件语句实现编程思维的查询语句 自定义变量和条件语句语法规则 自定义变量规则 @变量名:=固定值 | 函数调用 | 条件语句 别名 mysql> SELECT @min_price:=MIN(price),@max_...
  • ES Mapping、字段类型Field type详解

    万次阅读 多人点赞 2018-10-15 15:02:18
    字段类型概述 一级分类 二级分类 具体类型 核心类型 字符串类型 string,text,keyword 整数类型 integer,long,short,byte 浮点类型 double,float,half_float,scaled_float 逻辑类型 boolean 日期类型 date 范围类型 ...
  • Elasticsearch 字段数据类型

    千次阅读 2017-05-12 17:21:33
    Elasticsearch 可以支持单个 document 含有多个不同的数据类型。 核心数据类型(Core datatypes) 字符型(String datatype):string(这个是2.x版本的,5.x版本之后是text,并没有string类型了。) 数字型...
  • Django数据库字段类型(Field types) AutoField class AutoField(**options) 它是一个根据 ID 自增长的 IntegerField 字段。通常,你不必直接使用该字段。如果你没别的字段上指定主键,Django 就
  • Sql 查询当天、本周、本月记录 --查询当天:  select * from info where DateDiff(dd,datetime,getdate...select * from info where DateDiff(hh,datetime,getDate())--info为表名,datetime为数据库字段值  --
  • 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值...
  •  【试题内容】、【答案信息】两个表,最初是作为几个字段添加到【试题信息】里的,可以看到试题内容和答案这两个字段很长,表里有3万记录时,表已经占 了1G的空间,列试题列表时非常慢。经过分析,发现系统很多...
  • 数据库中计算值的更新方法

    千次阅读 2013-09-10 14:23:44
    做项目时,经常项目会遇到有些值是通过其他表经过计算得来的,然后将计算结果保存到数据库。比如一个休假系统,一个员工每年已休天数就是一个计算值,通过SUM员工的所有有效休假申请单可获得。再比如...
  •  可以是一对一、一对多、多对多的关系。一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。  特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证...
  • Hibernate4 注解方法所有的字段含义

    千次阅读 2015-12-30 14:48:43
    可以在实体bean使用 @Version 注解,通过这种方式可添加对乐观锁定的支持   @Basic- 用于声明属性的存取策略: @Basic(fetch=FetchType.EAGER)    即时获取(默认的存取策略) @Basic(fetch=...
  • 借助计算表,可以表添加到模型。但是,你会创建定义表值的数据分析表达式 (DAX) 公式,而非从数据源中查询值,并将值加载到表的列 Power BI Desktop 计算表是通过使用报表视图或数据视图的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 191,145
精华内容 76,458
关键字:

在查询中可以增加新的字段用于计算