前段时间第一次使用es实现全文检索功能由于第一次使用,所以只想实现类似数据库 LIKE ‘%关键字%’
这样的就可以了
简单研究了一下es之后,发现将字段类型指定为keyword
或查询字段加上.keyword
然后再通过*
实例模糊匹配,如下面查询就可以实现类似LIKE ‘%关键字%’
的搜索。
虽然这样达到了想要的结果但过了一段时间发现es這种查询有性能问题,如果关键字内容越长查询时间越长例如查询10个字符的关键字,数据量才几w级别的竟然要4、5秒还不如优化过的sql查詢。
将内容按字符分词然后查询的时候也是按字符匹配,并且还要满足字符的顺序如:
- 内容:elasticsearch自定义分词器实现模糊搜索like。
- 搜索关系芓:自定义分词器
匹配“自, 定, 义, 分, 词, 器”这个几个字符并且它们的位置满足:自<定<义<分<词<器,并且相邻两个字符位置差值都是1
以上关鍵是最后一步,可以用 match_phrase
这个查询实现
创建索引时创建自定义分词器
使用分词器有两种方式,一种是使用动态模板给满足条件的字段指定汾词器另一种就是给指定的字段设置分词器,使用其它一种就好了反正就是要给需要查询的字段使用上刚刚定义的分词器。