2016-11-12 187 views
0
逃逸

我想匹配不幸在目錄中我已經被格式化這樣的文檔中的短語:在獅身人面像

Includes sides?** *No* 

Includes sides?** *Yes* 

尋找任何一個失敗,例如

Search idx_test where MATCH('"Includes sides?** *Yes*"') 

如果我上搜索

Search idx_test where MATCH('"Includes sides"') 

它不會失敗(但發現兩者)

,如果我作爲測試數據本身更改爲:

Includes sides No 

我可以用獅身人面像找到它

Search idx_test where MATCH('"Includes sides No"') 

所以很清楚?*需要逃脫。然而,我沒有做過任何工作,例如使用\*

回答

0

試試。

...where MATCH('"Includes sides\\? \\*Yes\\*"') 

需要多個,一個是在sql字符串中,另一個是在擴展語法查詢中。

如果你還將它寫成像php這樣的語言字符串,可能需要更多引號,以便在php字符串中進行轉義。

也可以將它們從查詢中刪除,它們只用於查詢語法,所以不需要更改數據。

(Alough稍微複雜一些,如果使用phrase_boundary

+0

從這裏開始:'where MATCH('「Includes sides \\?」')'這不會返回'work from home?',但它確實返回了任何'work from home'後跟一個字符,例如' '從home_'工作。 – user3649739

+0

對於從查詢中刪除的問題,我嘗試過'在哪裏匹配(''包括雙方是'')'假設他們從來沒有索引,但這也是一個失敗。很難解決,因爲從理論上講,如果它是任何字符,我可以做'包含邊?'但是? – user3649739

+0

現在我只是做了「包含邊」!((「包含邊」近2 /「否」)(「包含邊」>>「否」))'。 – user3649739

0

嗯,我試圖解決方案的#沒有工作:

  1. 我在配置增加regexp_映射?=>qmark*=>asterisk。我曾與這個沒有運氣,無論我如何搜索即Includes sidesqmarkIncludes sides qmark(後者假設?作爲獨立的工作

  2. 處理我評論的正則表達式退了出去,並在邏輯試圖尋找在Includes Sides No的是?*不被索引所以不存在這些空間。

  3. 我加Includes sidesNo之間的間隔假設一個或多個字符的沒有索引,但不知何故佔用一個字符空間,例如Includes sides No

  4. 我添加了兩次轉義,正如我所建議的那樣``包括方面\?\ * \ * \ *否「也失敗了。

這些都沒有工作。

我試圖做NEAR /和>>在一起,並且工作:

("Includes sides" NEAR/2 "No") ("Includes sides" >> "No") 

這似乎笨重。

最後我做這個工作,其

"Includes sides \\*"No" 

其中一期工程,但總謎我爲什麼,雖然,因爲它解決了這個問題,我張貼。我希望別人能解釋這背後的機制:

  • 顯然\\是sphinxql逃生的正確方法
  • 顯然逃脫星號工作
  • 顯然逃脫?
  • 然而,如果星號必須然後逃亡怎麼來的:

"Includes sides\\?\\*\\* \\*No

不工作,

"Includes sides\\*\\* \\*No

不起作用?如果它不索引/識別?但很明顯是*那麼我需要在Includes之後逃脫這兩個。然而它好像?Includes之後都不存在,但之前存在asterisk

對不起,包括問題和答案,但我的解決方案工作。如果我有更好的方式提供我使用的解決方案和它顯示的問題,請讓我知道,因爲我試圖不在這裏混淆問題。

+0

您是否檢查過使用'phrase_boundary'?如果你有'?'在那裏,這將複雜詞組匹配。還檢查是否?和*在charset_table中。在你的情況下,仍然會推薦他們不在charset_table中。 – barryhunter