11

新工作第十九周

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAwOTU4NzM5Ng%3D%3D&%3Bmid=2455771164&%3Bidx=1&%3Bsn=fd0c9b6cf5fa187c49a17ede290e398a
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

今天公司宣布2.17号上班(在家办公),感谢公司的关心,等疫情过后,会更珍惜生活和工作,人生在世,确实应该感恩,这次舆情过后,大家原来觉得闹心的事情根本就不会在乎了,因为相比舆情,这些算什么呢。

z g人的幸福指数又进一步下降了,但会让我们更加珍视拥有的,媳妇老家是湖北随州的,本想着过年前幸福和闺女先去江苏老家,然后去湖北的,但1.17号我就觉得不对,所以就直接让她们从江苏回北京了,原因很简单,传染性、潜伏性、流动性真的让人很害怕。

这周主要是搜索项目逐步落地了,说点感受。

1:项目感受

搜索项目不同其他产品项目,具有技术主导性,理解核心概念很重要,否则就会跑偏,而且要串联起来,任何一个事情,如果不能把流程走通,那就会有风险。

不管是产品设计还是技术设计,如果你听不懂或者设计复杂,那就说明绝对有问题。

在具体落地的时候,还是那几点:模块化,不断的拆分、分解,明白什么是难点,逐步优化。

其实 ELK 我前期已经看了二周了,但如果没有落地,总感觉是空中楼阁,那是不是说明实践更重要?我不这么看,前期的准备也非常重要,有些概念在初步看的时候可能模模糊糊,一旦加上实践,就会茅塞顿开,不管你做了什么准备,总会有用的时候。

不落地会让人很焦虑,而落地解决问题后会让人很轻松,这就是所谓的压力吧。

不过在落地的时候,发现原来按部就班的学习方式也有问题,有的时候为了安慰自己,就会做一些笔记,其实用处不是太大,重要的是自己吃透。

比如 ELK 中有很多搜索指令,现在想想,其实它每一个指令都有应用场景,想想为什么官方要提供这个指令。

2:用户搜索

基于昵称查询,用不着中文分词,就是parse短语匹配,在 ELK 中理解text和keyword类型非常重要;query和filter上下文也很重要;match和term区别同样如此。

通过logstash将用户表(MySQL)的数据导入到 ELK 中,优势就是不用写程序,MySQL一有更新就会自动同步,类似于binlog。

但配置 logstash 并非易事,相当于学一门脚本语言,本次有两个收获。

在 ELK 中date字段存储的是UTC时间,一定不要用东8区时间存入,后续会写三篇文章(ELK date类型、logstash date filter、logstash jdbc 时间处理)。

第二个搜索就是为了让logstash找到最新更新的数据,在MySQL中应该使用unix整型的字段进行where比较,不要用datetime字段类型比较,否则会导致数据不能及时更新(还是UTC时间问题)。

logstash调试不是很方便,但通过log能够发现大部分问题,未来需要关注写入性能。

3:中文分词

昨天写了篇文章描述中文分词《 elasticsearch-analysis-hanlp中文分词器的一点心得 》,今天的收获就是如果配置enable_traditional_chinese_mode参数,就会导致索引失败,所以只好先放弃中文繁体的匹配了。

后续要简单看一点分词的理论文章。

4:文章搜索

这是难点,一方面是分词,一方面是相关性算分(结合搜索和业务需要)。

一期也用logstash进行数据导入,但有两个问题:文章表字段太多,结构复杂,导入的时候不是特别方便,但如果熟练使用logstash可能就没有该问题;另外文章很多数据(比如评论数)不在文章表,所以不能完全依赖logstash。

从这两个角度考虑,未来可能使用队列方式导入。

技术使用是要根据现有技术能力和理解逐步迭代的,所以本次相关性算分使用的方法可能不是最合适的,第一版结合 ELK 复合查询(bool)、function_score、most_fields,大概如下:

GET test/_search
{
  "explain": true
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "should": [
            {
              "multi_match": {
                "query": "虞大胆",
                "operator": "or",
                "fields": [
                  "title",
                  "content"
                ],
                "type": "most_fields",
                "tie_breaker": 0.4
              }
            },
            {
              "term": {
                "is_tj": {
                  "value": "1"
                }
              }
            }
          ],
          "filter": [
            {
              "term": {
                "status": {
                  "value": "1"
                }
              }
            }
          ]
        }
      },
      "field_value_factor": {
        "field": "num",
        "modifier": "log2p",
        "factor": 0.1
      },
      "boost_mode": "sum",
      "max_boost": 3
    }
  }
}

大家可以给点建议,可能看到explain算分过程很重要。

最后再说说疫情,可能最好的防御方式就是锻炼吧,写完我就打算出去跑一跑,同时推荐一本书《这样吃最健康》,突然发现的,打算今天再看看,里面提到身(平衡)、心(平和)、灵(愉悦),身体是自己的,没身体就什么也没了。

最后写博客也是降压的一种方式,理理思路,让自己平和一点。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK