Elasticsearch-字首、萬用字元、正則、模糊搜尋詳解
阿新 • • 發佈:2018-12-25
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"
}
}
}
}