1.对于前缀的匹配搜索:
GET /forum/article/_search
{
"query": {
"prefix": {
"articleID": {
"value": "J"
}
}
}
}
prefix的匹配一般是处理不分词的场景,将会匹配articleID中以”J”开头的doc。prefix不会计算revelance score,只是作一个过滤的操作,和filter唯一的区别是filter会缓存结果,而prefix不会。前缀越短要处理的doc越多,性能越差。
2.对于通配符的搜索:
GET /forum/article/_search
{
"query": {
"wildcard": {
"content": {
"value": "*k"
}
}
}
}
?会匹配任意字符,*会匹配0个或多个字符。性能根prefix一样差,必须要扫描整个倒排索引。
3.对于正则的搜索:
GET /forum/article/_search
{
"query": {
"regexp":{
"content":"thi[n]."
}
}
}
[0-9]:指定范围内的数字
[a-z]:指定范围内的字幕
.:一个字符
+:前面的正则表达式可以出现一次或多次
正则的搜索同样会扫描全表,性能也会很差
4.对于模糊搜索:
GET /forum/article/_search
{
"query": {
"fuzzy": {
"author_first_name": {
"value": "tony",
"fuzziness": 2
}
}
}
}
- fuzziness参数调整纠正的次数
通常不会直接用上述搜索,而会用下面的搜索:
GET /forum/article/_search
{
"query": {
"match": {
"author_first_name": {
"query": "tonyn",
"fuzziness": "AUTO",
"operator": "and"
}
}
}
}