我想在solr name:/.+\.m+d$/
中運行以下正則表達式查詢。我在我的索引中有以下文件名:Solr正則表達式查詢全局標誌
readme.md
2013.02.26.md
test.mmd
並且它們都不匹配。刪除$
匹配readme.md條目。我相信問題是我需要指定一個全局模式修飾符,但找不到執行此操作的語法。
我想在solr name:/.+\.m+d$/
中運行以下正則表達式查詢。我在我的索引中有以下文件名:Solr正則表達式查詢全局標誌
readme.md
2013.02.26.md
test.mmd
並且它們都不匹配。刪除$
匹配readme.md條目。我相信問題是我需要指定一個全局模式修飾符,但找不到執行此操作的語法。
這些是基於與Solr的正則表達式匹配實驗,我的意見:
做你的正則表達式中所有特殊字符的HTML percent encoding。 This site有助於手動執行百分比編碼。
如果要匹配整個值,請確保您在字符串字段上執行了正則表達式匹配。正則表達式匹配文本字段將涉及標記化,並將根據索引期間產生的標記進行工作。
對於solr正則表達式,不指定起始錨點^
或結束錨點$
,因爲它始終假定您正在匹配整個字符串。除非您在開始或結束時指定.*
或.+
(或某些此類正則表達式),否則始終與開頭的^
和末尾的$
匹配。
我只是索引的3個值在字符串字段中輸入您的問題,發出了這樣的查詢,並將其所有的3個文件匹配:
q=id:/.%2B%5C.m%2Bd/
的.%2B%5C.m%2Bd
的PCRE是.+\.m+d$
。
我在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];
}
reg exp語法似乎很難找到Solr。看看這個stackoverflow問題:http://stackoverflow.com/questions/9332343/what-regular-expression-features-are-supported-by-solr-edismax – 2013-02-27 15:38:43
有一個語法規範在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
感謝您的回覆。我注意到我的名字字段是text_general,但改爲字符串似乎沒有任何作用。也搜索ID字段我得到相同的結果。順便說一句我正在使用Solr Admin查詢進行測試,轉義是由表單完成的,所以我認爲這不是問題。 – Zarnywoop 2013-03-04 14:57:23
實際上將字段更改爲字符串似乎已解決此問題。它現在不需要正則表達式,即名稱:*。m * d。正如你指出的那樣使用正則表達式時,你不需要尾隨$。再次感謝你的幫助。 – Zarnywoop 2013-03-04 15:29:36
謝謝,您的評論終於幫我找到了solr regexp上的文檔。在做了一個字符串索引並在開始和結束時放上。*之後,我的sorl regexp的工作和預期的一樣:) – Shinhan 2013-08-27 10:51:19