白话Elasticsearch07- 深度探秘搜索技术之基于term+bool实现的multiword搜索底层剖析

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 白话Elasticsearch07- 深度探秘搜索技术之基于term+bool实现的multiword搜索底层剖析

20190806092132811.jpg


概述


继续跟中华石杉老师学习ES,第七篇

课程地址: https://www.roncoo.com/view/55


普通match转换为term+should


上一篇博文中我们 使用了 搜索标题中包含java或elasticsearch的blog 这个例子

GET /forum/article/_search
{
  "query": {
    "match": {
      "title": "java elasticsearch"
    }
  }
}


我们通过分词器查看,可以知道 es是把 java和elasticsearch放到了倒排索引中,

那es是如何查询的呢? 我们通过 profile

GET /forum/article/_search
{
  "profile": "true", 
  "query": {
    "match": {
      "title": "java elasticsearch"
    }
  }
}

20190604002232988.png

或者kibana提供的

20190604002046237.png

使用诸如上面的match query进行多值搜索的时候,es会在底层自动将这个match query转换为bool的语法 . bool should,指定多个搜索词,同时使用term query

等同于

GET /forum/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "title": "java"
          }
        },
        {
          "term": {
            "title": "elasticsearch"
          }
        }
      ]
    }
  }
}


and match转换为term+must

搜索标题中包含java和elasticsearch的blog 中的

GET /forum/_search
{
  "query": {
    "match": {
      "title": {
        "query": "java elasticsearch",
        "operator": "and"
      }
    }
  }
}

and match转换为term+must

等同于

GET /forum/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "title": "java"
          }
        },
        {
          "term": {
            "title": "elasticsearch"
          }
        }
      ]
    }
  }
}


minimum_should_match如何转换

搜索包含java,elasticsearch,spark,hadoop,4个关键字中,至少3个的blog


GET /forum/_search
{
  "query": {
    "match": {
      "title": {
        "query": "java elasticsearch hadoop spark",
        "minimum_should_match": 3
      }
    }
  }
}

等同于

GET /forum/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "title": "java"
          }
        },
        {
          "term": {
            "title": "elasticsearch"
          }
        },
        {
          "term": {
            "title": "hadoop"
          }
        },
        {
          "term": {
            "title": "spark"
          }
        }
      ],
      "minimum_should_match": 3
    }
  }
}


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5天前
|
JSON 搜索推荐 API
使用Elasticsearch进行全文搜索:技术深度解析
【5月更文挑战第16天】本文深入解析了使用Elasticsearch进行全文搜索的技术细节。Elasticsearch是一个基于Lucene的开源搜索引擎,支持全文、结构化搜索和数据分析,具备优秀的扩展性。文中介绍了其核心功能,包括全文搜索、结构化搜索、分析和可扩展性。详细步骤涉及安装配置、数据准备、创建索引、导入数据、构建查询及结果处理。Elasticsearch凭借其高效性能和灵活性,成为企业全文搜索的首选解决方案。
|
6天前
|
存储 自然语言处理 搜索推荐
分布式搜索引擎ElasticSearch
Elasticsearch是一款强大的开源搜索引擎,用于快速搜索和数据分析。它在GitHub、电商搜索、百度搜索等场景中广泛应用。Elasticsearch是ELK(Elasticsearch、Logstash、Kibana)技术栈的核心,用于存储、搜索和分析数据。它基于Apache Lucene构建,提供分布式搜索能力。相比其他搜索引擎,如Solr,Elasticsearch更受欢迎。倒排索引是其高效搜索的关键,通过将词条与文档ID关联,实现快速模糊搜索,避免全表扫描。
75 2
|
6天前
|
安全 搜索推荐 定位技术
一张图30个知识点,全方位认知 Elasticsearch 技术发展
一张图30个知识点,全方位认知 Elasticsearch 技术发展
22 3
|
6天前
|
SQL 监控 搜索推荐
Elasticsearch 与 OpenSearch:开源搜索技术的演进与选择
Elasticsearch 与 OpenSearch:开源搜索技术的演进与选择
40 2
|
6天前
|
人工智能 程序员 开发者
Elasticsearch 中文社区的转型后,搜索人怎么破局?
Elasticsearch 中文社区的转型后,搜索人怎么破局?
16 0
|
6天前
|
人工智能 Java API
如何在 Elasticsearch 论坛/社群上提出高质量的技术问题?
如何在 Elasticsearch 论坛/社群上提出高质量的技术问题?
18 0
|
6天前
|
存储 机器学习/深度学习 API
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
26 0
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
|
6天前
|
存储 搜索推荐 Java
Java远程连接本地开源分布式搜索引擎ElasticSearch
Java远程连接本地开源分布式搜索引擎ElasticSearch
|
6天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
103 0
|
6天前
|
自然语言处理
elasticsearch中term与match区别
elasticsearch中term与match区别
44 0

热门文章

最新文章