2013-02-27 75 views
0

我想在solr name:/.+\.m+d$/中運行以下正則表達式查詢。我在我的索引中有以下文件名:Solr正則表達式查詢全局標誌

readme.md 
2013.02.26.md 
test.mmd 

並且它們都不匹配。刪除$匹配readme.md條目。我相信問題是我需要指定一個全局模式修飾符,但找不到執行此操作的語法。

回答

2

這些是基於與Solr的正則表達式匹配實驗,我的意見:

  • 做你的正則表達式中所有特殊字符的HTML percent encodingThis site有助於手動執行百分比編碼。

  • 如果要匹配整個值,請確保您在字符串字段上執行了正則表達式匹配。正則表達式匹配文本字段將涉及標記化,並將根據索引期間產生的標記進行工作。

  • 對於solr正則表達式,不指定起始錨點^或結束錨點$,因爲它始終假定您正在匹配整個字符串。除非您在開始或結束時指定.*.+(或某些此類正則表達式),否則始終與開頭的^和末尾的$匹配。

我只是索引的3個值在字符串字段中輸入您的問題,發出了這樣的查詢,並將其所有的3個文件匹配:

q=id:/.%2B%5C.m%2Bd/ 

.%2B%5C.m%2Bd的PCRE是.+\.m+d$

+0

感謝您的回覆。我注意到我的名字字段是text_general,但改爲字符串似乎沒有任何作用。也搜索ID字段我得到相同的結果。順便說一句我正在使用Solr Admin查詢進行測試,轉義是由表單完成的,所以我認爲這不是問題。 – Zarnywoop 2013-03-04 14:57:23

+0

實際上將字段更改爲字符串似乎已解決此問題。它現在不需要正則表達式,即名稱:*。m * d。正如你指出的那樣使用正則表達式時,你不需要尾隨$。再次感謝你的幫助。 – Zarnywoop 2013-03-04 15:29:36

+0

謝謝,您的評論終於幫我找到了solr regexp上的文檔。在做了一個字符串索引並在開始和結束時放上。*之後,我的sorl regexp的工作和預期的一樣:) – Shinhan 2013-08-27 10:51:19

0

我在Reg exp好友試過了這個。 IT符合你的測試。

.+\.m+d 

php(Preg)語法用於迭代字符串中的所有匹配項。

preg_match_all('/.+\.m+d/', $subject, $result, PREG_PATTERN_ORDER); 
for ($i = 0; $i < count($result[0]); $i++) { 
    # Matched text = $result[0][$i]; 
} 

這是如果^ $在換行和點匹配匹配新的生產線和案例insesitive

preg_match_all('/.+\.m+d/sim', $subject, $result, PREG_PATTERN_ORDER); 
for ($i = 0; $i < count($result[0]); $i++) { 
    # Matched text = $result[0][$i]; 
} 
+0

reg exp語法似乎很難找到Solr。看看這個stackoverflow問題:http://stackoverflow.com/questions/9332343/what-regular-expression-features-are-supported-by-solr-edismax – 2013-02-27 15:38:43

+0

有一個語法規範在https://lucene.apache。 org/core/4_4_0/core/org/apache/lucene/util/automaton/RegExp.html,但他們不會告訴像'/〜/'和'/ <2-4> /'這樣的非標準擴展。 – flow 2013-10-01 15:12:14