美文网首页
4.8-SpaceJam一个全文搜索的实例

4.8-SpaceJam一个全文搜索的实例

作者: 落日彼岸 | 来源:发表于2020-04-02 21:15 被阅读0次

⽬的

  • ⽬标:⽤过⼀个具体案例,帮助你了解并巩固所学的知识点

    • 写⼊数据 / 设置 Mapping,设置 Analysis

    • 查询并⾼亮显示结果

    • 分析查询结果,通过修改配置和查询,优化搜索的相关性

  • 分析问题,结合原理,分析思考并加以实践

TMDB 数据库

TMDB
  • 创建于 2008 年,电影的 Meta Data 库

  • 46 万本电影 / 12万本电视剧 / 230万张图 ⽚ / 每周 20万次编辑

  • 提供 API。总共有超过20万开发⼈员和公司 在使⽤

数据导⼊

data
  • 数据特征 – 标题信息较短 / 概述相对较⻓

  • 通过 TDMB Search API

  • 将查询数据保存在本地 CSV ⽂件中

  • 使⽤ Python 导⼊及查询数据

  • 索引的主分⽚数设置为 1,使⽤默认 Dynamic Mapping

Use Case – 查找 Space Jam

空中⼤灌篮
  • 空中⼤灌篮 (Space JAM)

  • 华纳公司动画明星 / 篮球巨星乔丹 / 外星⼩怪物

  • 案例:⽤户不记得电影名,⽽希望通过⼀些关键字,搜索到电影 的详细信息

  • 搜索关键字:“Basketball with Cartoon Aliens”

Space Jam,一次全文搜索的实例

  • 环境要求

    • Python 2.7.15

    • 可以使用pyenv管理多个python版本(可选)

  • 进入 tmdb-search目录

DEMO 操作流程

# 导入数据[0]
python ingest_tmdb_from_file.py

# 查询结果[0]
python query_tmdb.py

# 导入数据[1]
python ingest_tmdb_from_file.py

# 查询结果[1]
python query_tmdb.py

# 查询结果高亮(highlight),查询命中状况[1]
python query_tmdb.py hl

Highlight - 结果⾼亮

POST tmdb/_search
{
  "_source": ["title","overview"],
  "query": {
    "multi_match": {
      "query": "basketball with cartoon aliens",
      "fields": ["title","overview"]
    }
  },
  "highlight" : {
        "fields" : {
            "overview" : { "pre_tags" : ["\\033[0;32;40m"], "post_tags" : ["\\033[0m"] },
            "title" : { "pre_tags" : ["\\033[0;32;40m"], "post_tags" : ["\\033[0m"] }

        }
    }
}

思考与分析

  • “精确值” 还是 “全⽂”?

  • 搜索是怎么样的?不同的字段需要配置怎么样的分词器

  • 测试不同的的选项

  • 分词期 / 多字段属性 / 是否要 g-grams / what are some critical synonyms / 为字段设置不同的权重

  • 测试不同的选项,测试不同的搜索条件

Demo

  • 查看 csv ⽂件中的电影源数据

  • 使⽤默认 Dynamic Mapping,⽤ Python 导⼊数据

  • 查看搜索结果和相关性算分 / 对搜索结果⾼亮显示

  • 使⽤英⽂分词器 / 为查询语句设置不同的 Boosting / 增加⼦多字段

测试相关性 – 理解原理 + 多分析 + 多调整测试

  • 技术分为道和术两种

  • 道 – 原理和原则

  • 术 – 具体的做法,具体的解法

  • 关于搜索,为了有⼀个好的搜索结果。除了真正理解背后的原理,更需要多加实践与分析

  • 单纯追求“术”,会⼀直很⾟苦。只有掌握了本质和精髓之“道”,做事才能游刃有余

  • 要做好搜索,除了理解原理,也需要坚持去分析⼀些不好的搜索结果。只有通过⼀定时间的积累, 才能真正有所感觉

  • 总希望⼀个模型,⼀个算法,就能毕其功于⼀役,是不现实的

监控并且理解⽤户⾏为

  • 不要过度调试相关度

  • ⽽要监控搜索结果,监控⽤户点击最顶端结果的频次

  • 将搜索结果提⾼到极⾼⽔平,唯⼀途径就是

  • 需要具有度量⽤户⾏为的强⼤能⼒

  • 可以在后台实现统计数据,⽐如,⽤户的查询和结果,有多少被点击了

  • 哪些搜索,没有返回结果

本节知识点回顾

  • ⽬标:⽤过⼀个具体案例,帮助你了解并巩固所学的知识点

  • 使⽤ Python 脚本导⼊及查询数据 / Mapping 设定

  • Mapping 设定和分词器的选择⾄关重要

  • 监控并理解⽤户⾏为 / 查询并调试相关度

  • Boosting 查询字段 / Explain API / ⾼亮显示

课程demo

POST tmdb/_search
{
"_source": ["title","overview"],
 "query": {
   "match_all": {}
 }
}

POST tmdb/_search
{
  "_source": ["title","overview"],
  "query": {
    "multi_match": {
      "query": "basketball with cartoon aliens",
      "fields": ["title","overview"]
    }
  },
  "highlight" : {
        "fields" : {
            "overview" : { "pre_tags" : ["\\033[0;32;40m"], "post_tags" : ["\\033[0m"] },
            "title" : { "pre_tags" : ["\\033[0;32;40m"], "post_tags" : ["\\033[0m"] }

        }
    }
}

相关

相关文章

  • 4.8-SpaceJam一个全文搜索的实例

    ⽬的 ⽬标:⽤过⼀个具体案例,帮助你了解并巩固所学的知识点写⼊数据 / 设置 Mapping,设置 Analysi...

  • 构建全文搜索引擎

    实现快速全文搜索引擎的方法(2种):(1)利用全扫描进行全文搜索(2)利用索引进行全文搜索 利用全扫描进行全文搜索...

  • 全文搜索

    全文搜索有两个重要的方面是:1.相关性:评价查询和结果间的相关程度2.分析:将文本块转换成有区别、规范化的toke...

  • FULLTEXT 搜索

    FULLTEXT 搜索 MySQL 的全文搜索功能,不使用模板匹配操作的情况下,进行单词或短语的查找。 全文搜索 ...

  • MongoDB全文搜索 --- 2022-04-03

    本章节,介绍MongoDB的全文搜索,区别于SQL的Like,MongoDB的全文搜索对于文本搜索效率要高于SQL...

  • 全文搜索引擎 Elasticsearch(一)入门

    一、简介 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索...

  • 【ES从入门到实战】一、全文检索-ElasticSearch-简

    简介 elasticsearch 全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎...

  • Lucene—全文检索

    1. 案例分析:什么时全文检索,如何实现全文检索   1.1 案例   实现一个文件的搜索功能,通过关键字搜索文件...

  • MySQL的全文搜索

    MySQL支持全文搜索,主要是解决Like查询或其他多条件模糊查询带来的性能问题 以下文章内容主要介绍如何使用全文...

  • ES 全文搜索

    ES 全文搜索 全文搜索 使用了match查询的多词查询只是简单地将生成的term查询包含在了一个bool查询中。...

网友评论

      本文标题:4.8-SpaceJam一个全文搜索的实例

      本文链接:https://www.haomeiwen.com/subject/xamfphtx.html