es keyword和text的区别以及联想词实现方案

简介: es keyword和text的区别以及联想词实现方案

keyword和text的区别

相同

支持模糊查询和精确查询

不同

分词

keyword 不分词

text 分词

聚合查询

keyword 支持

text 不支持

联想词实现方案

内容

基于es的keyword和text来实现

keyword 类型

存储多个相关关键字, 使用间隔符分开, 查询时使用正则查询(wildcard)

text 类型

存储需要分词的关键字, 比如中间可能会带符号的关键词, 我一般用来存储需要搜索出来的关键字

例子

创建一个索引库

PUT /xiaofei_test
{
  "mappings": {
    "type":{
      "properties":{
        "key_text": {
          "type": "text"
        },
        "full_word":{
          "type": "keyword"
        }
      }
    }
  }
}


新增一条数据


PUT /xiaofei_test/type/1
{
  "key_text": "新疆•菠萝密",
  "full_word": "菠萝 水果 新疆 boluo "
}


然后查询的dsl语句为

GET xiaofei_test/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "key_text": {
              "query": "菠萝",
              "slop": 5 
            }
          }
        },
        {
          "wildcard": {
            "full": "*菠萝*"
          }
        }
      ]
    }
  }
}

text 和slop


slop 的作用是跳词, 允许中间有一些其他字符

用text的原因就是可能你想搜的关键词里面会有一些间隔符之类的, text会分词, 比如说上面的• 之类, 不用text的话我如果要搜 “新疆菠萝密” 肯定是搜不出来的, text和slop的作用就在此体现


查看分词结果


POST xiaofei_test/_analyze
{
  "text": "新疆•菠萝密",
  "field": "key_text"
}





目录
相关文章
|
5月前
el-select 支持拼音搜索(含插件 pinyin-match 的使用)
el-select 支持拼音搜索(含插件 pinyin-match 的使用)
163 0
|
5月前
|
人工智能 Java
AI大模型----SpringBoot添加放行最简单的方式@AuthAccess,问题库构思,概念title,答案text,搜索search
AI大模型----SpringBoot添加放行最简单的方式@AuthAccess,问题库构思,概念title,答案text,搜索search
|
Python
Python搜索与匹配绝技:掌握search()和match()从零到高手
Python搜索与匹配绝技:掌握search()和match()从零到高手
121 0
|
自然语言处理 数据库
Elasticsearch系列——实战探索text与keyword的区别
Elasticsearch系列——实战探索text与keyword的区别
|
搜索推荐 C++
白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索
白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索
98 0
|
算法
白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
105 0
白话Elasticsearch12-深度探秘搜索技术之基于multi_match + best fields语法实现dis_max+tie_breaker
白话Elasticsearch12-深度探秘搜索技术之基于multi_match + best fields语法实现dis_max+tie_breaker
96 0
|
算法
白话Elasticsearch15-深度探秘搜索技术之使用copy_to定制组合field解决cross-fields搜索弊端
白话Elasticsearch15-深度探秘搜索技术之使用copy_to定制组合field解决cross-fields搜索弊端
92 0
|
搜索推荐 索引
白话Elasticsearch22- 深度探秘搜索技术之match_phrase_prefix实现search-time搜索推荐
白话Elasticsearch22- 深度探秘搜索技术之match_phrase_prefix实现search-time搜索推荐
91 0
|
Java Apache 索引
白话Elasticsearch10-深度探秘搜索技术之基于dis_max实现best fields策略进行多字段搜索
白话Elasticsearch10-深度探秘搜索技术之基于dis_max实现best fields策略进行多字段搜索
97 0