ES中如何对text字段进行精确匹配

这篇具有很好参考价值的文章主要介绍了ES中如何对text字段进行精确匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

在实际使用ES过程中,经常会遇到这样的问题:
既需要对一个字段进行全文检索,又要对该字段进行等值查询。
我们知道全文检索的字段类型需要设置为text,但是text字段类型又不支持term等值查询。那么怎么解决这个问题呢?
答案是通过fields进行多字段配置


fields说明

为了不同的目的以不同的方式索引相同的字段通常很有用。这就是fields多字段的目的。
例如,一个string 字段可以被映射为一个text类型用于全文搜索的keyword字段,以及一个keyword类型用于等值比较、排序或聚合的字段。

fields主要使用场景:

  1. 对一个字段配置多个类型的type以应对不同的查询场景
  2. 对一个字段配置多个分词规则以支持多种全文检索规则

官网说明
多字段Multi-fields允许为不同目的以多种方式索引相同的字符串值,例如一个字段用于搜索和一个多字段用于排序和聚合,或者由不同的分析器分析相同的字符串值。


同字段多type配置

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

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "city": {
        "type": "text",
        "fields": {
          "raw": { 
            "type":  "keyword"
          }
        }
      }
    }
  }
}

2、添加数据

PUT my-index-000001/_doc/1
{
  "city": "New York"
}

PUT my-index-000001/_doc/2
{
  "city": "York"
}

3、查询
通过city.raw使用city的别名raw进行排序

GET my-index-000001/_search
{
  "query": {
    "match": {
      "city": "york" 
    }
  },
  "sort": {
    "city.raw": "asc" 
  },
  "aggs": {
    "Cities": {
      "terms": {
        "field": "city.raw" 
      }
    }
  }
}

同字段多分词规则配置

有些场景,我们需要一个字段,满足多套分词规则的检索。

1、新建索引
字段text,默认采用standard analyzer分词器;
通过fields声明别名english,采用english分词器。

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "text": { 
        "type": "text",
        "fields": {
          "english": { 
            "type":     "text",
            "analyzer": "english"
          }
        }
      }
    }
  }
}

2、添加测试数据

PUT my-index-000001/_doc/1
{ "text": "quick brown fox" } 

PUT my-index-000001/_doc/2
{ "text": "quick brown foxes" } 

3、查询测试
说明:利用multi_match多字段匹配查询,实现一个字段多种分词规则检索。
GET my-index-000001/_search
{
“query”: {
“multi_match”: {
“query”: “quick brown foxes”,
“fields”: [
“text”,
“text.english”
],
“type”: “most_fields”
}
}
}


总结:

本文主要是介绍了ES中通过fields定义字段别名,实现对text字段进行精准匹配。
1、text字段用来做全文检索,keyword字段用来做等值匹配、排序和聚合运算。
2、怎么通过fields给字段定义别名
3、fields多字段的2种典型运用场景:文章来源地址https://www.toymoban.com/news/detail-461884.html

  • 1个字段数据需要对应多个type类型
  • 1个字段数据需要满足多种分词匹配规则

到了这里,关于ES中如何对text字段进行精确匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包