首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Elastci搜索:在数组字段上精确匹配

Elasticsearch是一个开源的分布式搜索和分析引擎,它基于Lucene库构建而成,广泛应用于云计算领域中的大数据分析、日志处理、搜索引擎等场景。Elasticsearch提供了简单易用且强大的API,使得开发者可以快速构建复杂的搜索功能。

在数组字段上进行精确匹配是Elasticsearch中的一项重要功能。数组字段是指包含多个值的字段,例如标签、分类等,常用于进行数据分析和数据分类。Elasticsearch提供了多种方式来进行数组字段的精确匹配。

首先,可以使用"term"查询来进行数组字段的精确匹配。"term"查询会精确匹配字段中包含指定值的文档。例如,假设有一个名为"tags"的数组字段,包含["搜索引擎", "云计算", "大数据"]等标签,我们可以使用如下查询来匹配包含"云计算"标签的文档:

代码语言:txt
复制
GET /index/_search
{
  "query": {
    "term": {
      "tags": "云计算"
    }
  }
}

此外,还可以使用"terms"查询来进行数组字段的精确匹配。"terms"查询可以匹配字段中包含指定多个值的文档。例如,假设有一个名为"tags"的数组字段,我们可以使用如下查询来匹配同时包含"搜索引擎"和"云计算"标签的文档:

代码语言:txt
复制
GET /index/_search
{
  "query": {
    "terms": {
      "tags": ["搜索引擎", "云计算"]
    }
  }
}

除了以上提到的查询方式,Elasticsearch还提供了更多的查询类型和功能,例如模糊查询、范围查询、布尔查询等,以满足各种搜索需求。

对于Elasticsearch的相关产品和推荐,腾讯云提供了"云搜索服务",即TCES(Tencent Cloud Elasticsearch Service)。TCES基于Elasticsearch构建而成,提供高可用、高可靠的Elasticsearch集群服务,可用于快速构建搜索引擎、日志分析等应用场景。您可以通过腾讯云官方网站了解更多关于TCES的详细介绍和使用指南。

  • TCES官方网站:https://cloud.tencent.com/product/tces
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ElasticSearch权威指南:基础入门(中)

分页 之前的 空搜索 中说明了集群中有 14 个文档匹配了(empty)query 。 但是 hits 数组中只有 10 个文档。如何才能看到其他的文档?...最后,查询字符串搜索允许任何用户索引的任意字段执行可能较慢且重量级的查询,这可能会暴露隐私信息,甚至将集群拖垮。...我们问的不只是“这个文档匹配查询吗”,而是“该文档匹配查询的程度有多大?”换句话说,该文档与给定查询的相关性如何? 我们很少对全文类型的域做精确匹配。相反,我们希望文本类型的域中搜索。...但是,数组是以多值域索引的—可以搜索,但是无序的。 搜索的时候,你不能指定 “第一个” 或者 “最后一个”。 更确切的说,把数组想象成装在袋子里的值 。 空域 当然,数组可以为空。...如果你一个全文字段使用 match 查询,执行查询前,它将用正确的分析器去分析查询字符串: { "match": { "tweet": "About Search" }} 如果在一个精确值的字段使用它

6.1K41

ES的常用查询与聚合

执行之前将每个字段的分词器(或搜索分词器)应用于查询字符串。...这怎么可能,既然是精确匹配,一个字段也不可能有两个不同的值。 1.3.3 range query 匹配某一范围内的数据型、日期类型或者字符串型字段的文档,注意只能查询一个字段,不能作用在多个字段。...所以使用term查询可以精确匹配,但设置为text,则不一定——如果有添加分词器,则可以搜索到;如果没有,而是使用默认的分词器,只是将其分为一个一个的字,就不会被搜索到。...Note3:所以根据上面的提示,一般纯数组比较适合存放标签类的数据,就像上面的案例一样,同时字段类型设置为keyword,而不是text,搜索时进行精确匹配就好了。...Filters Filter的基础,可以查询多个字段各自独立的各个指标,即对每个查询结果分别做指标聚合。

6.4K30
  • ES入门:查询和聚合

    "must": 这是一个数组,包含了必须匹配的条件。在这里,我们要求文档的"age"字段必须匹配值"40"。 "must_not": 这也是一个数组,包含了不能匹配的条件。..."must": 这是一个数组,包含了必须匹配的条件。在这里,我们要求文档的"state"字段必须匹配值"ND",即北达科他州。 "filter": 这是一个数组,包含了过滤条件,这些条件用于排除文档。...在这里,有两个过滤条件: "term": 这是一个精确匹配查询条件,要求文档的"age"字段必须精确匹配值"40"。...Filter(过滤):过滤条件返回文档的精确匹配结果,结果不包括相关性得分。过滤条件用于精确筛选文档,通常用于精确匹配、范围查询、布尔条件等情况。...总之,query主要用于搜索和排序文档,通常在需要考虑相关性的情况下使用,如全文搜索。而filter主要用于筛选文档,通常在需要精确匹配和排除的情况下使用,如范围查询、精确匹配、布尔条件等。

    75190

    深入搜索之结构化搜索

    结构化搜索是指针对具有内在结构的数据进行检索的过程。比如日期、时间和数字都是结构化的,它们有精确的格式。...非评分查询任务旨在降低那些将对评分查询计算带来更高成本的文档数量,从而达到快速搜索的目的。 从概念记住非评分计算是首先执行的,这将有助于写出高效又快速的搜索请求。 4....索引数组数据时,如果需要根据数组数量匹配,可以多索引一个字段,用来保存数量。...处理Null值 null, [] (空数组)和 [null] 所有这些都是无法存于倒排索引中。针对这些字段ES中是什么都不存的。 查询时,需要进行处理。...全文搜索 title属性搜索"比特币"进行全文搜索: GET /my_index3/my_type/_search { "query":{ "match":{ "title":

    2.9K20

    【ES三周年】分布式搜索索引elasticsearch JavaAPI编写ES搜索

    例如:match_querymulti_match_query精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。...所以不会对搜索条件分词。常见的有:term:根据词条精确值查询range:根据值的范围查询1.3.1.term查询因为精确查询的字段搜是不分词的字段,因此查询的条件也必须是不分词的词条。...term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段range查询:根据数值范围查询,可以是数值、日期的范围1.4.地理坐标查询所谓的地理坐标查询,其实就是根据经纬度查询...must:必须匹配的条件,可以理解为“与”should:选择性匹配的条件,可以理解为“或”must_not:必须不匹配的条件,不参与打分filter:必须匹配的条件,不参与打分2.搜索结果处理搜索的结果可以按照用户指定的方式去处理或展示...:term:词条精确匹配range:范围查询与之前的查询相比,差异同样查询条件,其它都一样。

    1.4K51

    ElasticSearch-查询

    例如: match_query multi_match_query 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。...: 商城的输入框搜索 百度输入框搜索 例如京东: 因为是拿着词条去匹配,因此参与搜索字段也必须是可分词的text类型的字段。...所以不会对搜索条件分词。常见的有: term:根据词条精确值查询 range:根据值的范围查询 1.3.1.term查询 因为精确查询的字段搜是不分词的字段,因此查询的条件也必须是不分词的词条。...term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段 range查询:根据数值范围查询,可以是数值、日期的范围 1.4.地理坐标查询 所谓的地理坐标查询,其实就是根据经纬度查询...精确查询主要是两者: term:词条精确匹配 range:范围查询 与之前的查询相比,差异同样查询条件,其它都一样。

    16410

    ES的DSL语言高级查询

    ) 3.1.1 模糊匹配 模糊匹配主要是针对文本类型的字段,文本类型的字段会对内容进行分词,对查询时,也会对搜索条件进行分词,然后通过倒排索引查找到匹配的数据,模糊匹配主要通过match等参数来实现 match...: 匹配条件类型 and : 条件分词后都要匹配 or : 条件分词后有一个匹配即可(默认) minmum_should_match : 指定最小匹配的数量 3.1.2 精确匹配 term : 单个条件相等...terms : 单个字段属于某个值数组内的值 range : 字段属于某个范围内的值 exists : 某个字段的值是否存在 ids : 通过ID批量查询 3.2 组合条件查询(多条件查询) 组合条件查询是将叶子条件查询语句进行组合而形成的一个完整的查询条件...3.5 Query方式查询:案例 根据名称精确查询姓名 term, term查询不会对字段进行分词查询,会采用精确匹配 注意: 采用term精确查询, 查询字段映射类型属于为keyword....query_string:和match类似,但是match需要指定字段名,query_string是在所有字段搜索,范围更广泛。

    2.2K10

    ES的DSL语言高级查询

    ) 3.1.1 模糊匹配 模糊匹配主要是针对文本类型的字段,文本类型的字段会对内容进行分词,对查询时,也会对搜索条件进行分词,然后通过倒排索引查找到匹配的数据,模糊匹配主要通过match等参数来实现 match...: 匹配条件类型 and : 条件分词后都要匹配 or : 条件分词后有一个匹配即可(默认) minmum_should_match : 指定最小匹配的数量 3.1.2 精确匹配 term : 单个条件相等...terms : 单个字段属于某个值数组内的值 range : 字段属于某个范围内的值 exists : 某个字段的值是否存在 ids : 通过ID批量查询 3.2 组合条件查询(多条件查询) 组合条件查询是将叶子条件查询语句进行组合而形成的一个完整的查询条件...3.5 Query方式查询:案例 根据名称精确查询姓名 term, term查询不会对字段进行分词查询,会采用精确匹配 注意: 采用term精确查询, 查询字段映射类型属于为keyword....query_string:和match类似,但是match需要指定字段名,query_string是在所有字段搜索,范围更广泛。

    2.8K20

    Elasticsearch数据类型及其属性

    如果字段需要进行过滤(比如查找已发布博客中status属性为published的文章)、排序、聚合。keyword类型的字段只能通过精确搜索到。...比如,某个字段的取值最大值不会超过100,那么选择byte类型即可。迄今为止吉尼斯记录的人类的年龄的最大值为134岁,对于年龄字段,short足矣。字段的长度越短,索引和搜索的效率越高。...+0.0,同样range查询中上边界是-0.0不会匹配+0.0,下边界是+0.0不会匹配-0.0。...null值也会被分词 "null_value": "NULL" 19、position_increament_gap:影响距离查询或近似查询,可以设置多值字段的数据或分词字段,查询时可以指定...5.4 版本开始, keyword取代了不需要分词的string. —— 当一个字段需要按照精确值进行过滤、排序、聚合等操作时, 就应该使用keyword类型.

    10K42

    深入理解Elasticsearch的索引映射(mapping)

    1.2 keyword 类型 用途:用于精确搜索,如标签、邮箱地址、主机名、状态码、邮政编码或任何其他需要精确匹配字段。...特点:nested类型的字段允许您保持数组中对象的独立性,使得可以对嵌套对象执行精确查询和聚合操作。这对于处理具有复杂结构的JSON数据非常有用。...例如,您可以将一个字段同时定义为text和keyword类型,以便同时支持全文搜索精确匹配。 多字段Elasticsearch的映射定义中非常灵活,并且可以用于多种场景。...例如,一个字段可以使用标准分析器进行全文搜索,而另一个子字段可以使用关键字分析器进行精确匹配。 不同数据类型:除了文本类型外,您还可以为数字、日期等类型的字段定义多字段。...利用多字段进行灵活搜索:通过使用多字段功能,您可以为同一个数据字段创建不同类型的索引,以满足不同的搜索需求。例如,您可以同时支持全文搜索精确匹配和排序/聚合操作。

    77210

    什么是es?

    会索引每个文档的内容使之可以被搜索Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。...类比mysql中的数据库 2)type类型 一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑的分类。通常,会为具有一组共同字段的文档定义一个类型。 可类比mysql中的表。...text类型的字段无法通过指定文本精确的检索到,同时不能用于过滤、排序、聚合操作 keyword keyword不会被分词器分析,适合做精确查询。比如手机号,身份证号,用户id等。...es中没有数组类型,它的字段默认可以存储一个或多个值。..., "name"] } } } term query term 查询用来查找指定字段中包含给定单词的文档,term 查询不被解析,只有查询词和文档中的词精确匹配才会被搜索到 GET my_index/_

    89920

    【mongo 系列】索引浅析

    mongoDB ID 建立了唯一的单键索引,所以经常会使用 id 来进行查询;索引字段上进行精确匹配、排序以及范围查找都会使用此索引; 创建一个倒序的索引db.users. createIndex...({age:-1}); 复合索引 多个特定的属性建立索引复合索引键的排序顺序,可以确定该索引是否可以支持排序操作;索引字段上进行精确匹配、排序以及范围查找都会使用此索引,但与索引的顺序有关;为了性能考虑...既多个索引入口或者键值引用同一个文档 db.users.createIndex({favorites.city:1}) 空间索引 2 种平面几何的 2d 索引,球面几何的2dsphere索引 见后文详解文本索引 支持集合中搜索字符串内容...db.reviews.createIndex( { comments: "text" } ) Hash索引 不同于传统的B-树索引,哈希索引使用hash函数来创建索引索引字段上进行精确匹配,但不支持范围查询...2、GeyHaystack索引是一个特殊的索引,该索引被优化以较小的区域返回结 3、GeHaystack索引提高了使用平面几何图形的查询的性能 例如 平面的坐标我们可以这样来表示 // 数组形式 location

    1.7K10

    ElasticSearch进阶篇之-Query DSL

    ,统计成功/失败的搜索分片 hits 搜索结果 hits.total 搜索结果统计 hits.hits 实际的搜索结果数组(默认为前10条文档) sort 结果的排序key,没有就按照score排序 score...,而我们现在要讲的match是条件匹配 如果对应的字段是基本类型(非字符串类型),则是精确匹配。..." } } } 查询出address中包含 mill road的所有记录,并给出相关性得分 2.4 multi_match[多字段匹配] GET bank/_search {...,全文检索字段用match,其他非text字段匹配用term GET bank/_search { "query":{ "term":{ "account_number...":20 } } } 检索关键字 描述 term 非text使用 match text中我们实现全文检索-分词 match keyword 属性字段后加.keyword 实现精确查询

    69320

    ElasticSearch Server 扩展的弹性搜索解决方案

    )的表)、副本(用于控制查询性能及数据故障)、分片(每个分片就是一个Lucene索引) 通用属性: index_name:该属性存储索引中字段的名称,不指定默认为字段定义的对象名称 index:该属性取值为...analyzed或no,字符串也可以设置成not_analyzed,设置analyzed该字段被索引,可以被搜索,设置no该字段不能被搜索,字符串设置为not_analyzed该字段可以被搜索但是不分析...store:取值为no或yes,标注该字段是否存储原始值,即使没有指定原始值也可以通过_source返回 boost:默认1,表示该字段文档中的重要性,分数越高越重要 null_value:表示该字段文档中不存在时应写入何值..."query": { "term": { "title": { "value": "crime" } } } } #term查询 不被解析,匹配精确的词项...#must 必须在返回的文档匹配上 #must_not 不能在返回的文档匹配上 GET library/_search?

    1.5K20

    elasticsearch去重:collapse、cardinality、terms+top_hits实现总结

    它的主要目的是搜索大量文档时,只显示每个分组的一个代表文档,而不是显示所有匹配的文档。 原理 collapse功能基于一个或多个字段的值对搜索结果进行分组。...所有在这个字段具有相同值的文档将被分组在一起,并且只返回一个代表文档。 你还可以通过添加inner_hits参数来定制返回的分组代表文档。...注意事项 性能开销:大数据集应用collapse功能可能会带来额外的性能开销,因为需要对结果进行分组和排序操作。...使用collapse功能 原理:collapse功能通过指定一个字段来对搜索结果进行分组,并且每组只返回一个最佳匹配的文档(通常是基于排序字段的最高或最低值)。 灵活性:相对较低。...这个数值分页功能中通常不会被直接使用。而hits数组的大小与aggregations中的courseAgg聚合值相等,表示数组中展示的是去重后的数据。

    1.7K10

    2022最新ES面试题整理(Elasticsearch面试指南系列)「建议收藏」

    term的子句 match_all:匹配所有结果的子句 multi_match:多字段条件 match_phrase:短语查询, 4.2.3 精准查询-Term query term:匹配搜索词项完全相等的结果...keyword类型的字段只能通过精确值(exact value)搜索到。Id应该用keyword。keyword字段通常用于排序,汇总和Term查询,例如term。...(默认) false 新检测到的字段将被忽略。这些字段将不会被索引,因此将无法搜索,但仍会出现在_source返回的匹配项中。这些字段不会添加到映射中,必须显式 添加新字段。...) max_chars:前缀最大长度,<20,默认5(包含) meta:附加元数据 normalizer: norms:是否禁用评分(filter和聚合字段应该禁用)。...7.2 倒排索引的基本数据结构 Question 8:倒排表的压缩算法-1:FOR 倒排表的压缩算法:FOR 搜索引擎级别的数据量级通常通常在亿级甚至十亿级,那么也就说如果我们对其建立倒排索引,每个字段被拆分成了若干

    8.4K33

    重构实践:基于腾讯云Elasticsearch搭建QQ邮箱全文检索

    ES 的底层存储引擎是 Lucene,ES Lucene 的基础提供分布式集群的能力以确保可靠性、提供 REST API 以确保可用性。...,导致不能用一种搜索模式满足所有用户搜索意图; 订单号一般由字母+数组组成,分词器处理订单号时,由于默认的分词规则,会丢弃单字母或单数字,导致无法精确匹配。...ES搜索机制 ES 的全文搜索查询主要分为两种:match 和 match_phrase,它们的搜索机制是: 入信时,ES 分词器先对 doc 中 type:text 字段进行分词,默认记录下每个分词的词频和词语原文中的位置...新分词器的效果如上图所示,这时搜索 AL0927 就能够实现精确匹配。改造后的分词器解决了使用 ik 分词无法对字母+数字关键字精确搜索的问题。 6....如果使用 xm_ik_max_word 分词器精确搜索,可能会匹配上 20X07131A、20X07131AB、20X07131B 等,出现很多无关结果。

    2.4K30

    重构实践:基于腾讯云Elasticsearch搭建QQ邮箱全文检索

    ES 的底层存储引擎是 Lucene,ES Lucene 的基础提供分布式集群的能力以确保可靠性、提供 REST API 以确保可用性。...,导致不能用一种搜索模式满足所有用户搜索意图; 订单号一般由字母+数组组成,分词器处理订单号时,由于默认的分词规则,会丢弃单字母或单数字,导致无法精确匹配。...ES搜索机制 ES 的全文搜索查询主要分为两种:match 和 match_phrase,它们的搜索机制是: 入信时,ES 分词器先对 doc 中 type:text 字段进行分词,默认记录下每个分词的词频和词语原文中的位置...新分词器的效果如上图所示,这时搜索 AL0927 就能够实现精确匹配。改造后的分词器解决了使用 ik 分词无法对字母+数字关键字精确搜索的问题。 6....如果使用 xm_ik_max_word 分词器精确搜索,可能会匹配上 20X07131A、20X07131AB、20X07131B 等,出现很多无关结果。

    3.4K139

    ElasticSearch权威指南:深入搜索

    用不了多长时间,就会发现我们想要的更多:希望查询匹配更灵活,排名结果更精确,不同问题域下搜索更具体。 想要进阶,只知道如何使用 match 查询是不够的,我们需要理解数据以及如何能够搜索到它们。...最终,这也就意味着 ,null, [](空数组)和[null] 所有这些都是等价的,它们无法存于倒排索引中。 显然,世界并不简单,数据往往会有缺失字段,或有显式的空值或空数组。..."text": "Foxes" } 这意味着,如果使用底层 term 查询精确项 fox 时, english_title 字段匹配但 title 字段不会。...8.被破坏的相关度 讨论更复杂的 多字段搜索 之前,让我们先快速解释一下为什么只主分片 创建测试索引 。...第一种是只主分片创建索引,正如 match 查询 里介绍的那样,如果只有一个分片,那么本地的 IDF 就是 全局的 IDF。 第二个方式就是搜索请求后添加 ?

    4.3K31
    领券