一、前缀搜索 prefix
不计算相关度评分性能较差前缀搜索匹配的是分词后的词项前缀搜索没有缓存前缀搜索尽可能把前缀长度设置的更长GET product/_search{"query": {"fuzzy": {"name": {"value": "product1"}}}}
index_prefixes为词项创建倒排索引,
比如computer这个单词,本身是一个词项,index_prefixes可以为这个单词再创建倒排索引,min_chars=2,max_chars=5的话,创建的索引:co、com、comp、compu
PUT prefixindex{"mappings": {"properties": {"name": {"type": "text","analyzer": "ik_max_word","index_prefixes": {"min_chars": 2,"max_chars": 3}}}}}
优缺点:
优点:加快前缀索引的搜索效率
缺点:占用内存、空间
二、通配符 wildcard
匹配的也是分词后的词项term
# 造数据PUT testindex/_doc/1{"name":"zhang san"}PUT testindex/_doc/2{"name":"zhang si"}PUT testindex/_doc/3{"name":"zhuang san"}PUT testindex/_doc/4{"name":"zhuang si"}
# 用法GET testindex/_search{"query": {"wildcard": {"name": {"value": "*san"}}}}
* 数组中的每个值都是精准值
三、正则 regexp
1. 用法
GET testindex/_search{"query": {"regexp": {"name": ".*san"}}}
2. flags参数含义
四、模糊查询 fuzzy
1. 情况
1)混淆字符(box->fox)
2) 缺少字符(black->lack)
3) 多出字符(sic -> sick)
4) 颠倒次序(act->cat)
2. 用法
GET testindex/_search{"query": {"fuzzy": {"name": "xiaolahu"}}}
3. 参数
编辑距离:把字符改成正确的,需要挪到的次数
GET testindex/_search{"query": {"fuzzy": {"name": {"value": "xiaoloahu","fuzziness": 1,"transpositions":false}}}}
fuzziness, 默认是auto,根据字符串长度,从0,1,2取值
4. match查询也支持fuzziness
GET testindex/_search{"query": {"match": {"name": {"query":"xiaoloahu","fuzziness": 1}}}}
match是分词的,fuzzy是不分词的
fuzzy不适合数据量大时使用