首页 > 其他分享 >es结构设计的几种优化方式

es结构设计的几种优化方式

时间:2024-01-11 15:36:32浏览次数:30  
标签:es text 几种 索引 结构设计 phrase should type match

1、不需要查询的字段取消建立索引

es结构中,默认会给所有字段建立索引,占用索引空间

 "candidate_person":{
            "type": "keyword"
        },
        "candidate_email":{
            "type": "keyword",
                "index": false //设置不建立索引
        },

2、构建联合索引字段查询

例如我有title(标题)和description(正文),搜索时关键字会匹配这两个

语句如下

{
    "from": 0,
    "size": 10,
    "query": {
        "bool": {
            "should": [
                {
                    "match_phrase": {
                        "title": "中国"
                    }
                },
                {
                    "match_phrase": {
                        "description": "中国"
                    }
                }
            ],
            "minimum_should_match": 1
        }
    }
}

在构建索引时将两个字段作为联合索引查

构建方式如下:

  			"title":{
            "type": "text",
                "analyzer": "ik_max_word",
                "copy_to": "my_search"
        },
        "description":{
            "type": "text",
                "analyzer": "ik_max_word",
                "copy_to": "my_search"
        },
				"my_search":{
            "type": "text",
                "analyzer": "ik_max_word"
        }

查询时就变得简单,只需要匹配my_search即可,比两个字段的或查询速度快

{
    "from": 0,
    "size": 10,
    "query": {
        "bool": {
            "must": [
                {
                    "match_phrase": {
                        "my_search": "中国"
                    }
                }
            ]
        }
    }
}

3、选择合适的数据类型

mapping是对索引库中文档的约束,常见的mapping属性包括:

  • type:字段数据类型,常见的简单类型有:
  • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
  • 数值:long、integer、short、byte、double、float、
  • 布尔:boolean
  • 日期:date
  • 对象:object
  • index:是否创建索引,默认为true
  • analyzer:使用哪种分词器
  • properties:该字段的子字段

4、构建查询语句时尽量写在filter中,must需要计算相关性得分

注:filter的term条件查询不支持text

{
    "from": 0,
    "size": 10,
    "track_total_hits": true,
    "query": {
        "bool": {
            "must": [
                {
                    "match_phrase": {
                        "evaluate": "A"
                    }
                },
                {
                    "bool": {
                        "should": [
                            {
                                "match_phrase": {
                                    "title": "中国"
                                }
                            },
                            {
                                "match_phrase": {
                                    "description": "中国"
                                }
                            }
                        ],
                        "minimum_should_match": 1
                    }
                },
                {
                    "match_phrase": {
                        "zb_type": "工程招标"
                    }
                },
                {
                    "wildcard": {
                        "category": "*交通运输*"
                    }
                }
            ],
            "should": [
                
            ],
            "filter": [
                {
                    "term": {
                        "area": "北京"
                    }
                },
                {
                    "range": {
                        "publish_date": {
                            "gt": 1673419272000,
                            "lt": 1704955272000,
                            "format": "epoch_millis"
                        }
                    }
                },
                {
                    "range": {
                        "show_money": {
                            "gt": "1000000",
                            "lt": "10000000"
                        }
                    }
                }
            ]
        }
    }
}

标签:es,text,几种,索引,结构设计,phrase,should,type,match
From: https://blog.51cto.com/u_16199760/9199900

相关文章

  • Kubernetes 资源强制删除方法总结
    本文适用于K8s及K8s为核心的所有集群。引言在使用K8s时,有时候会遇到资源无法删除问题,就需要一些强制删除的手段。注:强制删除不应随意使用,尤其是在生产环境。注:本文只注重暴力美学,不对任何强制删除导致的后果负责。警告:以下操作均可能会导致数据丢失或集群崩溃,请勿在生产环境尝......
  • 机械蛛形机器人的ESP32解决方案及代码
    机械蛛形机器人的ESP32解决方案主要包括以下几个方面:硬件设计:使用ESP32作为控制器,通过电机驱动电路控制蜘蛛的移动。同时,需要连接传感器(如陀螺仪、加速度计等)来获取机器人的姿态信息。软件设计:编写程序来实现以下功能:读取传感器数据,计算机器人的姿态和速度;根据姿态和速度调整电机输......
  • OOP语义学 第一章 关于对象(Object Lessons)
    第一章关于对象(ObjectLessons)struct与class在C语言中,"数据"与"处理数据的操作(函数)"是分开声明的.语言本身没有支持"数据和函数"之间的关联性.我们把这种程序方法称为"程序性的(procedural)."举个例子:如果我们声明一个structPoint3d,像这样:typedefstructpoint3d{......
  • html换行的几种方式
    建议:不管采用哪种方式,就单一的选择一种,尽量保持编码的一致性,在写js处理页面的时候,也方便。html换行:<br>标签<br>标签是最简单的换行符,示例:<div>这是一段换行的示例。这是<br>一段换<br>行的示例。</div> 使用<p></p>进行html的换行。在一些富文本编辑器里,换行用的并......
  • 当创建一个service后,kubernetes会发生什么?
    本文分享自华为云社区《当创建一个service后,kubernetes会发生什么?》,作者:可以交个朋友。一、Service介绍1.1Kubernetes为什么会引入service?考虑到集群中Pod实例IP地址随着工作负载的生命周期的变化,常规通过访问Pod实例的IP方法变得不再实用。每个工作负载通常有一个或者更多个后端......
  • 创建service后,kubernetes会发生什么
    本文分享自华为云社区《当创建一个service后,kubernetes会发生什么?》,作者:可以交个朋友。一、Service介绍1.1Kubernetes为什么会引入service?考虑到集群中Pod实例IP地址随着工作负载的生命周期的变化,常规通过访问Pod实例的IP方法变得不再实用。每个工作负载通常有一个或者更多......
  • [LeetCode] 1363. Largest Multiple of Three 形成三的最大倍数
    Givenanarrayofdigits digits,return thelargestmultipleof three thatcanbeformedbyconcatenatingsomeofthegivendigitsin anyorder.Ifthereisnoanswerreturnanemptystring.Sincetheanswermaynotfitinanintegerdatatype,returnt......
  • es6_proxy
    Es6_proxy习题讲解概述这是对于es6中的proxy部分中的几道题做讲解,因为其晦涩难懂,所以单独抽出来做解释,方便以后复习的时候能快速的过,而不用重新想破脑袋。习题一varpipe=function(value){varfuncStack=[];varoproxy=newProxy({},{get:function(p......
  • No 'Access-Control-Allow-Origin' header is present on the requested resource', 跨
    https://blog.csdn.net/dear_little_bear/article/details/839993911.当请求不在同一域名下的资源文件(ip地址+端口号)时,会报如下错误:“No‘Access-Control-Allow-Origin’headerispresentontherequestedresource.Origin‘http://localhost:8080’isthereforenotall......
  • 一次生产 KubeSphere 日志无法正常采集事件解决记录
    作者:宇轩辞白,运维研发工程师,目前专注于云原生、Kubernetes、容器、Linux、运维自动化等领域。前言2023年11月7号下午,研发同事反馈,项目线上日志平台某个服务无法查看近期的日志。我登上KubeSphere平台进行查看,发现日志收集展示停留在10月15号那天,而其它的服务是正常......