admin 发布的文章

原文地址: Golang 中使用 JSON 的小技巧

部分技巧需要使用包: github.com/json-iterator

目录

  • 临时忽略struct字段
  • 临时添加额外的字段
  • 临时粘合两个struct
  • 一个json切分成两个struct
  • 临时改名struct的字段
  • 用字符串传递数字
  • 容忍字符串和数字互转
  • 容忍空数组作为对象
  • 使用 MarshalJSON支持time.Time
  • 使用 RegisterTypeEncoder支持time.Time
  • 使用 MarshalText支持非字符串作为key的map
  • 使用 json.RawMessage
  • 使用 json.Number
  • 统一更改字段的命名风格
  • 使用私有的字段

- 阅读剩余部分 -

背景

增加字段的时候手残,将 float 类型的字段,加了 " , 自动识别为了 text 类型,想要修改 mapping 的时候发现 Elastic search 的 mapping 建立之后就不能更新了 !!

解决方案

大体方案是 建立一个新的 索引 index_v2, 然后 reindex ,再将旧索引删掉,最后建立一个 alias 到 index_v2

- 阅读剩余部分 -

原文: https://www.cnblogs.com/yjf512/p/4897294.html

es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL)。
由于DSL查询更为直观也更为简易,所以大都使用这种方式。
DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式。
这里有一个地方注意的是官方文档里面给的例子的json结构只是一部分,并不是可以直接黏贴复制进去使用的。一般要在外面加个query为key的机构。




- 阅读剩余部分 -

1. term 匹配 text 类型的字段result为空

term 不建议匹配 type 为 text 并且不是 keyword 的字段,需要 type 为 long 或者 boolean 或者 keyword。
例如 index 的结构:

{
    "size": 25,
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "must": [
                        {
                            "term": {
                                "cc": {
                                    "value": "Quick Foxes!", // cc 的 type 需要为 keyword 才能匹配到, 因为 term 为完全匹配,这里被分词成 ["Quick", "Foxes"] 所以会匹配不到
                                    "boost": 1
                                }
                            },
                            "match": {
                                 "cc": "Quick Foxes!" // cc的 type 可以为 text
                            }
                        }
                    ]
                }
            }
        }
    },
    "_source": true
}

term 跟 match 的区别详见: term跟math的区别


- 阅读剩余部分 -

原文:https://juejin.im/post/5cd823f9e51d453abb1397d7

一、前言

最近有个需求,要计算出客户坐标附近5公里的所有门店,并按照步行距离排序。
最直接的方法就是遍历该城市下的所有门店,但是该方法明显不可取,因为在门店数量巨大,且还需要计算步行距离并排序的情况下,时间复杂度过高。
突然想到当年做图像遇见一个问题:给定一个视频中连续的三千帧,但是已经乱序,告诉你第一帧,将这三千帧进行排序。遍历图像的所有像素点同样不可取,当时的解决方案是利用感知哈希计算出所有图像的指纹,接着利用明氏距离计算距离第一张最近的图像作为第二张,然后计算距离第二张最近的作为第三张,以此类推。
同样,肯定也有哈希方法可将地理位置转换成某种编码,并且编码可用于地理计算。它就是 GeoHash




- 阅读剩余部分 -