如果有人知道這個簡單的答案,我不必通過創建額外的索引和逃脫的字符串,並在拋出我漂亮的代碼時大喊大叫。Zend Lucene不能通過特殊字符搜索所有搜索
基本上,我們運行的Lucene搜索不能處理任何非字母字符。空格,百分號,點,破折號,斜槓,你的名字。這是非常令人憤怒的,因爲我無法搜索包含這些角色的物品,無論我在哪裏逃避或不逃避。
我有兩個選擇:將這些字符殺死在一個單獨的索引中,並將它們從我正在搜索的名稱中刪除或停止該死的搜索。
如果有人知道這個簡單的答案,我不必通過創建額外的索引和逃脫的字符串,並在拋出我漂亮的代碼時大喊大叫。Zend Lucene不能通過特殊字符搜索所有搜索
基本上,我們運行的Lucene搜索不能處理任何非字母字符。空格,百分號,點,破折號,斜槓,你的名字。這是非常令人憤怒的,因爲我無法搜索包含這些角色的物品,無論我在哪裏逃避或不逃避。
我有兩個選擇:將這些字符殺死在一個單獨的索引中,並將它們從我正在搜索的名稱中刪除或停止該死的搜索。
您可以使用'/'轉義特殊字符。 Lucene會將以下內容視爲特殊字符,並且您必須轉義這些字符才能使其工作。
+ - && || ! () { } [ ]^" ~ * ? : \
如果你要搜索 「2 + 3」,查詢應該是 「2/+ 3」
使用QueryParser.escape(String s)
逃避查詢字符串。
如果您正在執行「布爾」查詢,這不是解決方案。因爲'+ web + mail'這樣的查詢會被轉義,並且它會爲這兩個關鍵字搜索「web」或「mail」。任何人都知道'Boolean'查詢有正確的轉義嗎? – TiMESPLiNTER
根據http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html#-
轉義字符斜線落後,不-forward:。
爲了回答Ankit,$似乎不需要轉義,因爲它不是特殊字符。
按照Ralph的建議逃離破折號對我沒有任何影響(Zend Lucene)。你會認爲,當一個單詞'abc-def'被索引,並且你搜索'abc-def'時,你會以某種方式找到該單詞,而不管在索引步驟中是否忽略短劃線。相同的輸入應該有相同的結果。這個詞似乎被編入兩個獨立的標記'abc'和'def'。然而,'abc-def'搜索'abc def'時沒有結果。
謝謝。這是正確的答案(我一直愚蠢地試圖用反斜槓逃脫)。然而,我們早已從Zend管理的Lucene索引中移除,因爲它是一個可怕的上帝該死的混亂。下一次,我們將打破一個Solr實例並繞過這一切。 – John
我只是有一個問題!我不需要轉義'$'符號,因爲它是一個特殊的字符,標誌着字符串的結尾? – Ankit