在獅身人面像的changelog它說爲0.9.8:如何在sphinxQL全文搜索中轉義特殊字符?
「添加查詢逃逸支持查詢語言,EscapeString()API調用」
我可以假設,應該有轉義特殊獅身人面像支持用於sphinxQL的字符(@,!, - ,...)?如果是這樣,也許有人可以指點我一個例子。我是 在文檔或網絡上的其他地方無法找到任何關於它的信息。
如果搜索詞組包含某個特殊字符,您將如何進行全文搜索(使用spinxQL)?我不太喜歡這個想法,以便在索引期間「掩蓋」它們。
謝謝!
在獅身人面像的changelog它說爲0.9.8:如何在sphinxQL全文搜索中轉義特殊字符?
「添加查詢逃逸支持查詢語言,EscapeString()API調用」
我可以假設,應該有轉義特殊獅身人面像支持用於sphinxQL的字符(@,!, - ,...)?如果是這樣,也許有人可以指點我一個例子。我是 在文檔或網絡上的其他地方無法找到任何關於它的信息。
如果搜索詞組包含某個特殊字符,您將如何進行全文搜索(使用spinxQL)?我不太喜歡這個想法,以便在索引期間「掩蓋」它們。
謝謝!
在每個API(php/python/java/ruby)中都有相應的函數EscapeString,但爲了逃避SphinxQL的工作,您必須在應用程序中編寫類似於SphinxQL沒有的函數。
函數本身onliner
def EscapeString(self, string):
return re.sub(r"([=\(\)|\[email protected]~\"&/\\\^\$\=])", r"\\\1", string)
,你可以輕鬆將其轉換成應用程序的代碼。
sphinxapi轉義函數的PHP版本在測試中不適用於我。此外,它不提供針對SQL注入排序字符的保護(例如單引號)。
我需要這個功能:
function EscapeSphinxQL ($string)
{
$from = array ('\\', '(',')','|','-','!','@','~','"','&', '/', '^', '$', '=', "'", "\x00", "\n", "\r", "\x1a");
$to = array ('\\\\', '\\\(','\\\)','\\\|','\\\-','\\\!','\\\@','\\\~','\\\"', '\\\&', '\\\/', '\\\^', '\\\$', '\\\=', "\\'", "\\x00", "\\n", "\\r", "\\x1a");
return str_replace ($from, $to, $string);
}
注意具體的獅身人面像的字符額外的反斜線。我認爲會發生什麼是他們通過一個SQL解析器來完成整個查詢,SQL解析器會刪除用於SQL目的的「無關」反斜槓(即'\ &' - >'&')。然後,它通過全文解析器放置MATCH子句,並且突然'&'是一個特殊字符。所以,你一開始就需要額外的反斜槓。
應該有問號嗎?用問號表現奇怪,它正在用「?」進行某種正則表達式搜索代表任何字符(但不包括空格)。 – Radek 2014-04-25 07:24:37
經過驗證......這確實很容易......非常感謝您指出我的意見。 – aurora 2011-06-09 10:37:26