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"
}





目录
相关文章
|
6月前
|
前端开发 UED 开发者
text-indent 的特殊性
text-indent 的特殊性
128 0
|
JavaScript 前端开发
如何把传统写法改成框架形式 es6
如何把传统写法改成框架形式 es6
49 0
|
JavaScript
号外!hex-lowcode-engine 全面支持国际化啦~
号外!hex-lowcode-engine 全面支持国际化啦~
146 1
号外!hex-lowcode-engine 全面支持国际化啦~
白话Elasticsearch12-深度探秘搜索技术之基于multi_match + best fields语法实现dis_max+tie_breaker
白话Elasticsearch12-深度探秘搜索技术之基于multi_match + best fields语法实现dis_max+tie_breaker
91 0
|
算法
白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
97 0
|
搜索推荐 C++
白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索
白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索
90 0
ts重点学习103-对象类型得兼容性
ts重点学习103-对象类型得兼容性
73 0
ts重点学习103-对象类型得兼容性
ts重点学习106-函数类型得兼容性
ts重点学习106-函数类型得兼容性
80 0
ts重点学习106-函数类型得兼容性
ts重点学习105-函数类型得兼容性
ts重点学习105-函数类型得兼容性
82 0
ts重点学习105-函数类型得兼容性
|
Android开发
libxxx.so- text relocations问题的终极解决方案
问题表现形式 错误或警告日志 当targetSdkVersion>=23且使用debug签名时,在6.0+的Android设备上运行App会输出以下错误Log: E/linker: /data/app/packagename/lib/arm/libxxx.
3169 0