2012-02-17 70 views
10

正則表達式允許使用下面顯示的模式匹配語法。 我試圖實現一個強大的搜索工具,儘可能多地實現這些。 我被告知edismax是該工作最靈活的工具。 下面哪個模式匹配表達式可以用edismax完成?我可以比edismax做得更好嗎?您能否提出我可能用於實現此功能的哪些過濾器和解析器補丁?如果我認爲Solr能夠達到這些類型搜索的可接受性能(即服務器端處理時間),我是否在做夢?Solr edismax支持哪些正則表達式?

正則表達式語法&從mysql

  1. ^匹配開始字符串的例子。 'fofo' REGEXP '^fo' => true
  2. $匹配字符串的結尾。 'fo\no' REGEXP '^fo\no$' => true
  3. * 0-無限通配符。 'Baaaan' REGEXP 'Ba*n' => true
  4. ? 0-1通配符。 'Baan' REGEXP '^Ba?n => false'
  5. + 1-無限通配符。 'Bn' REGEXP 'Ba+n' => false
  6. |要麼。 'pi' REGEXP 'pi|apa' => true
  7. ()*序列匹配。 'pipi' REGEXP '^(pi)*$' => true
  8. [A-DX],[^一個-DX]字符範圍/設定'aXbc' REGEXP '[a-dXYZ]' => true
  9. {N}或{M,N}基數符號'abcde' REGEXP 'a[bcd]{3}e' => true
  10. [:character_class:] 'justalnums' REGEXP '[[:alnum:]]+' => true

回答

15

Lucene 4.0版將使用特殊語法直接在標準查詢解析器中支持regex查詢。我證實它可以在我正在運行的Solr實例上運行,它是在二月份的顛覆中繼中建立的。

Jira ticket 2604描述了標準查詢解析器的擴展,使用特殊的正則表達式語法,使用正斜槓分隔正則表達式,類似於Javascript中的語法。它似乎在使用底層的RegexpQuery解析器。

所以一個簡單的例子:

body:/[0-9]{5}/ 

將匹配在文本語料庫我已經索引的五位數的郵政編碼。但奇怪的是,身體:\ \ d {5} /不適合我,並且也失敗了。

正則表達式的方言必須是Java的,但我不確定它裏面的所有東西都有效,因爲我只做了粗略的檢查。人們可能不得不仔細查看RegexpQuery代碼以瞭解什麼可行,哪些不可行。

+0

我挖了一點。有一個[描述支持的語法的頁面](https://builds.apache.org/job/Lucene-trunk/javadoc/core/org/apache/lucene/util/automaton/RegExp.html)。正則表達式引擎畢竟不是Java,而是在org.apache.lucene.util.automaton包中的Lucene中實現的。另請參閱[RegexpQuery]的文檔(https://builds.apache.org/job/Lucene-trunk/javadoc/core/org/apache/lucene/search/RegexpQuery.html)。 – 2012-03-06 01:19:03

+0

剛剛在一個字符串字段中試過Solr 4.0中的'\ d {4}'。這是行不通的。看起來我們只能使用'[0-9] {4}'。然而,我猜^是不需要的,因爲像'/ [0-9] {5} /'這樣的查詢實際上等價於Perl兼容的RegEx'/^[0-9] {5} $ /'即不使用'。*'作爲前綴意味着你從第一個字符強制匹配。 – arun 2013-02-17 20:03:29

+1

@RonaldWood你發佈的這兩個鏈接現在已經死亡。 – BlackVegetable 2013-07-17 23:51:52

4

正則表達式和(e)dismax沒有真正的可比性。 Dismax意味着直接處理普通的最終用戶輸入,而正則表達式不是典型的最終用戶輸入。

另外,將匹配正則表達式的東西與dismax很大程度上取決於text analysis settings和模式設計,而不是dismax本身。通過使用Solr,您通常可以根據具體的搜索需求定製模式和文本分析,可能在索引時間完成大部分工作。正則表達式與此不一致,甚至與Lucene倒排索引的基本結構不一致。

不過,Lucene提供了RegexQuery和更新的RegexpQuery。據我所知,這些沒有與Solr整合,但他們可能是。在Solr issue tracker開始一個新項目和快樂的編碼! :)

請記住,正則表達式查詢可能會一直很慢......但他們可以在您的情況下可接受的性能。

相關問題