带你读《Elastic Stack 实战手册》之32:——3.4.2.17.1.Multi-field(上)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之32:——3.4.2.17.1.Multi-field(上)

3.4.2.17.Text analysis, settings 及 mappings

3.4.2.17.1.Multi-field


创作人:金端

审稿人:欧阳楚才

 

同一个字段可以使用不同的索引方式,实现不同的查询用途。比如,字符串类型字段可以设置成 text 字段用于全文检索,同时作为 keyword 字段用于排序或聚合。

 

Multi-field 主要通过 mapping 中的 fields 参数实现。

 

主要实现方法如下:


PUT test-000001
{
  "mappings": {
    "properties": {
      "city": {
        "type": "text",
        "fields": {
          "keyword": { 
            "type":  "keyword"
          }
        }
      }
    }
  }
}

ES 默认一个字符串字段会被设置成 text 和 keyword 两种字段格式,text 可以支持全文搜索,而 keyword 用于精确搜索和聚合排序。以上面定义的 city 字段作为案例,向 test-000001 索引添加数据:

 利用 text 字段类型进行全文检索,利用 keyword 字段类型进行聚合和精确搜索


GET test-000001/_search
{
  "query": {
    "term": {
      "city": "york" 
    }
  },
  "sort": {
    "city.keyword": "asc" 
  },
  "aggs": {
    "Cities": {
      "terms": {
        "field": "city.keyword" 
      }
}
  }
}

返回结果如下:


{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
    // 根据全文搜索 york 并按照 asc 排序返回两个结果
      {
        "_index" : "test-000001",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "city" : "New York"
        },
        "sort" : [
          "New York"
        ]
      },
      {
        "_index" : "test-000001",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : null,
        "_source" : {
          "city" : "York"
        },
        "sort" : [
          "York"
        ]
      }
    ]
  },
  "aggregations" : {
  // 根据 city.keyword 聚合的结果
    "Cities" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "New York",
          "doc_count" : 1
        },
        {
          "key" : "York",
          "doc_count" : 1
        }
      ]
    }
  }
}

当然在特殊的生产场景下,可能会有同一个字段需要分词器甚至多个字段类型的使用需求,这个 fields 也可以可以满足的。比如:title 字段实现 standard 和 english 两种分词器且有

keyword 字段类型。


PUT test-000002
{
  "mappings": {
    "properties": {
      "title": {
        "type": "keyword",
        "fields": {
        // 实现 standard 和 english 两种不同分词的子字段
          "standard": {
            "type": "text",
            "analyzer": "standard"
          },
          "english": {
            "type": "text",
            "analyzer": "english"
          }
        }
      }
    }
  }
}
由于不同的分词器产生的词根并不完全一致,面对不同的搜索场景,这种方式可以很好的优化搜索体验。比如,下面这种情况:
PUT test-000002/_doc/1
{ "title": "quick brown fox" } 
PUT test-000002/_doc/2
{ "title": "quick brown foxes" } 
通过 _analyze API 查看一下这两个文档的具体解析。
standard 分词器。
POST _analyze
{
  "analyzer": "standard",
  "text": "quick brown foxes"
}

结果:


{
  "tokens" : [
    {
      "token" : "quick",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "brown",
      "start_offset" : 6,
      "end_offset" : 11,
      "type" : "<ALPHANUM>",
      "position" : 1
},
    {
      "token" : "foxes",
      "start_offset" : 12,
      "end_offset" : 17,
      "type" : "<ALPHANUM>",
      "position" : 2
    }
  ]
}



《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.1.Multi-field(下) https://developer.aliyun.com/article/1230162

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
XML 前端开发 数据格式
CSS应用
CSS应用
140 0
|
存储 编译器 C++
C++类与对象 - 3(拷贝构造函数和运算符重载)(超详细)(上)
C++类与对象 - 3(拷贝构造函数和运算符重载)(超详细)
79 0
|
11月前
|
设计模式 算法 Java
盘点Tomcat中常见的13种设计模式
【10月更文挑战第6天】本文深入探讨了Tomcat中常见的13种设计模式,包括单例模式、工厂模式、适配器模式、装饰者模式、组合模式、外观模式、享元模式、责任链模式、命令模式、迭代器模式、观察者模式、策略模式和模板方法模式。通过具体示例,展示了这些设计模式如何协同工作,支撑起Tomcat的高性能和高灵活性。
|
存储 安全 Java
Java基础教程(五千字带你快速入门!)(一)
Java基础教程(五千字带你快速入门!)(一)
【数据结构】判断二叉树是否是完全二叉树
【数据结构】判断二叉树是否是完全二叉树
502 5
|
12月前
|
SQL 机器学习/深度学习 自然语言处理
Text-to-SQL技术演进 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法剖析
本文介绍了Text-to-SQL的技术演进,并对OpenSearch-SQL方法进行剖析。
1540 8
|
人工智能 自然语言处理 搜索推荐
文本向量化模型新突破——acge_text_embedding勇夺C-MTEB榜首
在人工智能的浪潮中,大型语言模型(LLM)无疑是最引人注目的潮头。在支撑这些大型语言模型应用落地方面,文本向量化模型(Embedding Model)的重要性也不言而喻。 近期,我在浏览huggingface发现,国产自研文本向量化模型acge_text_embedding(以下简称“acge模型”)已经在业界权威的中文语义向量评测基准C-MTEB(Chinese Massive Text Embedding Benchmark)中获得了第一名。
文本向量化模型新突破——acge_text_embedding勇夺C-MTEB榜首
|
程序员 C++
空指针:深入探讨、危害与应对策略
空指针:深入探讨、危害与应对策略
|
C# 索引
WPF技术之ComboBox控件
WPF ComboBox控件是一个下拉列表框,它允许用户从列表中选择一个或多个项。它提供了一种简洁和交互性强的方式来选择数据。
585 0