[英]Parsing Lucene Query syntax and escaping for CloudSearch
基本上,我有一個需要同時支持Lucene.NET和Amazon CloudSearch的應用程序。
因此,我無法重新編寫查詢,我需要使用lucene的標准查詢,並在查詢上使用.ToString()來獲取語法。
問題是在Lucene.NET(我不知道Java版本是否相同)中,.ToString()方法返回不帶轉義字符的原始字符串。
因此,類似:
(title:blah:blah summary:"lala:la")
應該
(title:blah\:blah summary:"lala\:la")
我需要的是一個會添加轉義符的正則表達式。
這可能嗎? 如果是這樣,它將是什么樣子。
一些其他可能的差異:
(title:"this is a search:term")
(field5:"this is a title:term")
根據注釋和編輯,您似乎希望任何查詢字符串都可以被正則表達式正確地轉義,並且希望任何給定的Lucene查詢都可以由結果字符串准確表示。
那不會發生。
Lucene查詢語法無法表達所有Lucene查詢。 實際上,從Query.toString()
獲得的字符串通常甚至不能被QueryParser
解析 ,請記住這並不是對查詢的精確重構。
總而言之:您將以錯誤的方式進行操作。 Query.ToString()
並非旨在對查詢進行序列化,並且其目標不是創建可分析的字符串查詢。 它主要用於調試等。 如果您一直嘗試以這種方式使用它,那么試圖使用正則表達式來擺脫歧義查詢語法的這種愚蠢行為可能只是麻煩的開始 。
您可以使用此正則表達式轉義冒號:
在字符串的關鍵點
(?<!title|summary):
然后逃脫捕獲的冒號:
說明
向后看?<!
對於任何沒有title
或summary
的冒號,請匹配冒號:
觀看演示
輸入
(title:blah:blah summary:"lala:la")
產量
(title:blah\:blah summary:"lala\:la")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.