2012-04-26 15 views
5

當我通過一個查詢「狀態:或」lucene給出了一個錯誤,因爲它認爲「或」作爲布爾子句的 關鍵字,但在這裏我實際上是人稱俄勒岡州的縮寫。如何在lucene查詢中正確地轉義OR和AND?

我已經看到引用OR,所以查詢變成'狀態:'或''使它工作。

但這聽起來不太好,因爲我必須爲每個lucene使用的關鍵字進行字符串替換:AND OR NOT和其他?我沒有多少

我試圖直接構建查詢而不是做queryParser.parse(),但似乎這不通過分析器,這是一個大問題。

+0

您可以在手動構建查詢之前分析該術語 – jpountz 2012-04-26 17:07:58

回答

3

Lucene query syntax中只有3個獨立關鍵字 - AND,OR和NOT。 (「TO」也被使用,但只在範圍查詢中被識別)

這可能有助於您的引用代碼只需要識別實際用作應用程序中術語的Lucene關鍵字(如「OR」上面的例子)。

4

有許多的方式來逃避這個,清潔是逃避AND,OR,&不與領先的反斜線例如:

\\AND \\OR \\NOT

交替,代碼分析器將無法解析小寫格式作爲運營商

+0

所以我正在做這樣的事情'searchTerm.replaceAll(「\\ b(AND | OR | NOT)\\ b」,「\\\\\ \\\ $ 1「);'爲了逃避一個文字,並在用戶輸入的搜索框中使用,最終以solr查詢結束 - w我發現的帽子是通過預先處理\\工作而逃避AND,不再有解析異常,但它實際上並不搜索文字字符串。在Solr中,查詢中的參數'name:\\ AND'在返回名稱爲「Jim and john」的條目時沒有找到任何結果。小寫可能是要走的路,至少在solr! – icyitscold 2015-10-02 18:39:57

相關問題