参考文章:
https://blog.csdn.net/sfh2018/article/details/118083634
https://blog.csdn.net/w1014074794/article/details/119643883

text和keyword类型介绍

  • ES5.0及以后的版本取消了string类型,将原先的string类型拆分为textkeyword两种类型。它们的区别在于text会对字段进行分词处理而keyword则不会进行分词
    也就是说如果字段是text类型,存入的数据会先进行分词,然后将分完词的词组存入索引,而keyword则不会进行分词,直接存储
  • text类型的数据被用来索引长文本,例如电子邮件主体部分或者一款产品的介绍,这些文本会被分析,在建立索引文档之前会被分词器进行分词,转化为词组。经过分词机制之后es允许检索到该文本切分而成的词语,但是text类型的数据不能用来过滤、排序和聚合等操作
  • keyword类型的数据可以满足电子邮箱地址、主机名、状态码、邮政编码和标签等数据的要求,不进行分词,常常被用来过滤、排序和聚合。

elasticsearch如何对text字段进行精确匹配?

同字段多type配置

创建索引,在mapping中通过fields关键字给city字段添加别名raw,类型为keyword,用来做精确匹配以及排序。

  • 创建索引
PUT test_index03
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "city": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      }
    }
  }
}
  • 添加数据
PUT /test_index03/_doc/1
 {
  "name" : "叶子在这儿",
  "city" : "陕西省西安市长安区"
 }
PUT /test_index03/_doc/2
 {
   "name":"北京的小家",
   "city":"北京市昌平区回龙观街道"
 }
  • 精确查询(使用别名可以精确查询了)
GET /test_index03/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "city.raw": {
              "value": "陕西省西安市长安区"
            }
          }
        }
      ]
    }
  },
  "sort": {
    "city.raw": "asc"
  },
  "aggs": {
    "Cities": {
      "terms": {
        "field": "city.raw"
      }
    }
  }
}
同字段多分词规则配置

字段text,默认采用standard analyzer分词器;
通过fields声明别名english,采用english分词器。

PUT test_index04
{
  "mappings": {
    "properties": {
      "city": { 
        "type": "text",
        "fields": {
          "english": { 
            "type":     "text",
            "analyzer": "english"
          }
        }
      }
    }
  }
}
  • 添加数据
PUT test_index03/_doc/1
{ "text": "quick brown fox" } 

PUT test_index03/_doc/2
{ "text": "quick brown foxes" } 
  • 查询

利用multi_match多字段匹配查询,实现一个字段多种分词规则检索。

GET /test_index03/_search
{
  "query": {
    "multi_match": {
      "query": "quick brown foxes",
      "fields": [
        "text",
        "text.english"
      ],
      "type": "most_fields"
    }
  }
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐