1、字首搜尋
c3d0-kd345
c3k5-dfg65
c4i8-ui365
c3 --> 上面這兩個都搜尋出來 --> 根據字串的字首去搜尋
不用帖子的案例背景,因為比較簡單,直接用自己手動建的新索引,給大家演示一下就可以了
put my_index}}
}}
get my_index/my_type/_search
}}}
2、字首搜尋的原理
prefix query不計算relevance score,與prefix filter唯一的區別就是,filter會cache bitset
掃瞄整個倒排索引,舉例說明
字首越短,要處理的doc越多,效能越差,盡可能用長字首搜尋
字首搜尋,它是怎麼執行的?效能為什麼差呢?
match處理方式
c3-d0-kd345
c3-k5-dfg65
c4-i8-ui365
全文檢索
每個字串都需要被分詞
c3 doc1,doc2
d0kd345
k5dfg65
c4i8
ui365
c3 --> 掃瞄倒排索引 --> 一旦掃瞄到c3,就可以停了,因為帶c3的就2個doc,已經找到了 --> 沒有必要繼續去搜尋其他的term了
match效能往往是很高的
而prefix query不分詞
c3-d0-kd345
c3-k5-dfg65
c4-i8-ui365
為什麼用prefix query?
因為實際場景中,可能有些場景是全文檢索解決不了的
c3d0-kd345
c3k5-dfg65
c4i8-ui365
c3d0
kd345
c3 --> match --> 掃瞄整個倒排索引,能找到嗎
c3 --> 只能用prefix
prefix效能很差
3、萬用字元搜尋
跟字首搜尋類似,功能更加強大
c3d0-kd345
c3k5-dfg65
c4i8-ui365
5字元-d任意個字元5
5?-*5:萬用字元去表達更加複雜的模糊搜尋的語義
get my_index/my_type/_search
}}}
?:任意字元
*:0個或任意多個字元
效能一樣差,必須掃瞄整個倒排索引,才ok
4、正則搜尋
get /my_index/my_type/_search
}}
c[0-9].+
[0-9]:指定範圍內的數字
[a-z]:指定範圍內的字母
.:乙個字元
+:前面的正規表示式可以出現一次或多次
wildcard和regexp,與prefix原理一致,都會掃瞄整個索引,效能很差
主要是給大家介紹一些高階的搜尋語法。在實際應用中,能不用盡量別用。效能太差了。
Lucene 搜尋方法(字首搜尋)
prefixquery是一種字首搜尋,在檢索的時候,常常需要進行某種字首查詢,例如到圖書館查詢一本書,可能只能記得書名的前面幾個字,這種情況就可以用該種搜尋模式。public static void main string args try indexsearcher search new inde...
sql中萬用字元的搜尋
sql中有如下萬用字元 含義分別為 包含零個或更多字元的任意字串。下劃線 任何單個字元。指定範圍 例如 a f 或集合 例如 abcdef 內的任何單個字元。不在指定範圍 例如 a f 或集合 例如 abcdef 內的任何單個字元。一般情況,在搜尋框中輸入 下劃線 或者 百分號 然後進行搜尋,由於這...
745 字首和字尾搜尋
給定多個words,words i 的權重為i。設計乙個類wordfilter實現函式wordfilter.f string prefix,string suffix 這個函式將返回具有字首prefix和字尾suffix的詞的最大權重。如果沒有這樣的詞,返回 1。例子 輸入 wordfilter.f...