白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化

简介: 白话Elasticsearch04- 结构化搜索之使用terms query搜索多个值以及多值搜索结果优化

20190512185019228.png20190806092132811.jpg

terms概述


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

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

https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-terms-filter.html

20190512215903923.png

6.4版本对应的 terms query

https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-terms-query.html


7.0 版本对应的 terms query

https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-terms-query.html

前面的实例中,我们都是使用的term,只能将一个字段,从一个value中取搜索

term: {"field": "value"}


比如

{
   "term": {
      "articcleID": "XHDK-A-1293-#fJ3"
    }
  }


terms 呢? terms可以实现将一个字段,从多个value中检索的效果

terms: {"field": ["value1", "value2"]}


类似于SQL中的in

select * from table where col in ("value1","value2"......)


准备数据

为了演示terms, 我们再新增个tag字段吧

POST /forum/article/_bulk
{"update":{"_id":"1"}}
{"doc":{"tag":["java","hadoop"]}}
{"update":{"_id":"2"}}
{"doc":{"tag":["java"]}}
{"update":{"_id":"3"}}
{"doc":{"tag":["hadoop"]}}
{"update":{"_id":"4"}}
{"doc":{"tag":["java","elasticsearch"]}}


小例子

搜索articleID为KDKE-B-9947-#kL5或QQPX-R-3956-#aD8的帖子

GET /forum/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "terms": {
          "articleID": [
            "KDKE-B-9947-#kL5",
            "QQPX-R-3956-#aD8"
          ]
        }
      }
    }
  }
}


Terms Query写法(推荐)

GET /forum/_search
{
  "query": {
    "terms": {
      "articleID": [
        "KDKE-B-9947-#kL5",
        "QQPX-R-3956-#aD8"
      ]
    }
  }
}


20190512185036437.png



搜索tag中包含java的帖子

GET /forum/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "terms": {
          "tag": [
            "java"
          ]
        }
      }
    }
  }


Terms Query写法(推荐)

GET /forum/_search
{
  "query": {
    "terms": {
      "tag": [
        "java"
      ]
    }
  }
}


20190512185019228.png


优化搜索结果,仅仅搜索tag只包含java的帖子


上面的第二个例子中,搜索java ,可以看到返回了3条结果,其中

  "tag": [
            "java",
            "elasticsearch"
          ]
  "tag": [
            "java",
            "hadoop"
          ],


也被搜索出来了,如果仅仅是想搜索tag只包含java的帖子呢 ?

为了达到该效果,我们新增个tag_cnt字段 ,用数量来过滤下

POST /forum/article/_bulk
{"update":{"_id":"1"}}
{"doc":{"tag_cnt":2}}
{"update":{"_id":"2"}}
{"doc":{"tag_cnt":1}}
{"update":{"_id":"3"}}
{"doc":{"tag_cnt":1}}
{"update":{"_id":"4"}}
{"doc":{"tag_cnt":2}}


GET /forum/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "tag_cnt": 1
              }
            },
            {
              "terms":{
                "tag":["java"]
              }
            }
          ]
        }
      }
    }
  }
}


20190512185000670.png


Terms Query写法(推荐) ,_score 固定为1

GET /forum/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "tag_cnt": 1
          }
        },
        {
          "terms": {
            "tag": [
              "java"
            ]
          }
        }
      ]
    }
  }
}


计算相关度分数 _score 的写法

GET /forum/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "tag_cnt": 1
          }
        },
        {
          "terms": {
            "tag": [
              "java"
            ]
          }
        }
      ]
    }
  }
}


20190512221359893.png



总结一下:

  • terms多值搜索
  • 优化terms多值搜索的结果,可以增加个cnt字段标示一下,组合过滤
  • terms相当于SQL中的in语句


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
6月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
6月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 9.1.5 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.1.5 (macOS, Linux, Windows) - 分布式搜索和分析引擎
488 0
|
7月前
|
JSON 监控 Java
Elasticsearch 分布式搜索与分析引擎技术详解与实践指南
本文档全面介绍 Elasticsearch 分布式搜索与分析引擎的核心概念、架构设计和实践应用。作为基于 Lucene 的分布式搜索引擎,Elasticsearch 提供了近实时的搜索能力、强大的数据分析功能和可扩展的分布式架构。本文将深入探讨其索引机制、查询 DSL、集群管理、性能优化以及与各种应用场景的集成,帮助开发者构建高性能的搜索和分析系统。
508 0
|
存储 缓存 固态存储
优化Elasticsearch 硬件配置
优化Elasticsearch 硬件配置
701 5
|
缓存 监控 安全
Elasticsearch扩展和优化
【11月更文挑战第4天】
317 6
|
11月前
|
存储 安全 Linux
Elasticsearch Enterprise 9.0 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.0 (macOS, Linux, Windows) - 分布式搜索和分析引擎
464 0
|
11月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 8.18 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 8.18 (macOS, Linux, Windows) - 分布式搜索和分析引擎
412 0
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案
856 3
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
711 2
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
人工智能 自然语言处理 搜索推荐
云端问道12期实操教学-构建基于Elasticsearch的企业级AI搜索应用
本文介绍了构建基于Elasticsearch的企业级AI搜索应用,涵盖了从传统关键词匹配到对话式问答的搜索形态演变。阿里云的AI搜索产品依托自研和开源(如Elasticsearch)引擎,提供高性能检索服务,支持千亿级数据毫秒响应。文章重点描述了AI搜索的三个核心关键点:精准结果、语义理解、高性能引擎,并展示了架构升级和典型应用场景,包括智能问答、电商导购、多模态图书及商品搜索等。通过实验部分,详细演示了如何使用阿里云ES搭建AI语义搜索Demo,涵盖模型创建、Pipeline配置、数据写入与检索测试等步骤,同时介绍了相关的计费模式。
453 3

热门文章

最新文章