ES 在创建索引时,指定分词方式

我要在 ES 中创建一个索引,它包含多个字段。我想让其中一些字段使用“空格分词”,另一些字段使用“标准分词”。 示例代码如下: PUT /my_index { "settings": { "analysis": { "analyzer": { "space_analyzer": { "type": "custom", "tokenizer": "space_tokenizer" } }, "tok

Python 中带花括号的字符串格式化报错的问题

Python 中可以用 "before_{}_after".format("content") 的方式对字符串格式化。 问题来了,如果模板字符串中,本身就包含花括号,会直接报错(例如,对 JSON 模板做格式化)。 怎么解决?用双重花括号进行转义。 如图所示:

使用 ANTLR 实现公式解析

前言 做类似 BI 的产品时,会遇到公式解析场景。用户(前端)输入一个公式字符串,后端要解析为一个具体的函数对象。 我们使用 ANTLR 来做公式解析。 关于 ANTLR 的基本用法,及它在项目中的基本配置,参见:ANTLR4入门 本文并不是手把手教程,只讲核心点,其他不赘述。 定义函数类 我们会有一个 Function 的抽象类/接口,其他所有函数都继承 Function。函数可以套函数。 根据

ANTLR4 入门

简介 ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,它根据语法定义生成解析器,解析器可以构建和遍历解析树。 所有编程语言的语法,都可以用ANTLR来定义。ANTLR提供了大量的官方 grammar 示例。 核心概念 理解三个核心概念:Lexer、Parser、AST。 词法分析器(Lexer):将字符序列转换为单词(Token)

使用 Stopwatch 监控 sql 执行时间

这是我看到的一种模式,感觉挺实用的。可以用于监控任意代码的执行时间,比直接使用 System.currentTimeMillis() 稍微优雅一点点。 Stopwatch 是 guava 包中的工具类。 示例代码如下: log.info("begin to execute sql: {}", sql); Stopwatch stopwatch = Stopwatch.createStarted()

Lombok 常用注解

注解浅释 @Getter:生成 Getter 方法 @Setter:生成 Setter 方法 @ToString:生成 ToString 方法 @EqualsAndHashCode:生成 Equals 和 HashCode 方法,可通过 exclude 参数排除不需要的字段 @Data:包含了@Getter,@Setter,@ToString,@EqualsAndHashCode,@Require

pip 安装指定版本的模块

给 python2 安装 requests 库,发现最新的 requests 不支持 python2。于是需要用到指定版本号的安装方式: pip install requests==2.27.0  

手写简易 HashMap

这是我去年碰到的一道面试题,当时直接整懵逼了。源码大致看过,原理也知道,突然要写还真写不出来。于是这两天又把这个问题翻出来,尝试写了一版。 1 明确需求 实现一个简易的 HashMap,包含 hashmap 的核心功能(put、get) 实现拉链法即可,不必实现红黑树 最好实现扩容逻辑 不支持 key 为 null 的情况(要支持也可以,需要单独处理,比较简单) 为了让需求更加明确,写了单元测试:

Java 中的小顶堆和大顶堆

这是一个非常简单的知识点,却也值得一记。 在 Java 中,是用 PriorityQueue 来实现堆的。 小顶堆和大顶堆的代码如下: // 小顶堆 new PriorityQueue<>(); // 大顶堆 new PriorityQueue<>(Comparator.reverseOrder());