15 字首搜尋 萬用字元搜尋 正則搜尋

2021-10-01 15:39:39 字數 1622 閱讀 1388

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...