2014-05-05 49 views
2

在我的網絡應用程序中,我想讓我的用戶搜索特定的文章。解析用戶提交的搜索查詢

我需要支持以下運算符:

AND 
OR 
NOT 
() 
" " 

搜索查詢可能是這樣的:

aaa AND bbb AND (ccc or ddd) NOT "eee fff" 

如果可能的話,像通配符和*?太支持。

如果可能,我很想結束Linq表達式,這將允許我查詢EF,ElasticLINQ或Linq2SQL。

你知道有哪些項目可以讓我以一種簡單的方式完成這個任務嗎?

我一直在看Irony和Antlr,但他們看起來像這樣的矯枉過正。

任何想法?

編輯:
如果您有任何建議,我怎麼能這個節目我自己,我會非常有興趣了。但以前一定有人在這個位置上。

+1

用戶是否必須編寫'AND','OR',...?他們是程序員嗎?你有沒有過度工程?你意識到你還需要做一些語法檢查('AND AND AND AND(OR OR OR)NOT NOT')不要看到任何簡單的解決方案。如果你真的需要做這樣的搜索功能,不需要用戶寫任何東西(特別是如果他不是程序員),讓他點擊,選擇,拖動,放下,但不寫入搜索查詢。 –

+0

感謝您的評論。輸入查詢的人是網站的管理員,並熟悉語法。 –

+0

我同意這幾乎肯定是過度工程。這樣做的目的是使用高級查找不支持的語法來查找文章,還是試圖讓非CRM用戶訪問文章? – Zach

回答

1

我最近自己實現了一個類似的解析器,這是一個相當艱鉅的任務。我必須定義語法,實施詞彙和句法分析,以及表達評估邏輯。這裏是:see Vb.Net code on Gist

我沒有在這裏提供很多細節,恕我直言,它不是最好的方式去爲你,除非你有寫這樣的代碼的經驗。

與此同時,我從來沒有聽說過任何工具可以自動執行這樣的句法和詞法分析,並且易於使用。

我知道有Lex,YaccBison,但這些都是爲C++,他們是非常複雜的。從來沒有發現任何有趣的C#。

因此,我建議你再次考慮一下,你是否真的需要這樣實現它。

UPD:我發現了一個很好的SO問題,這可能是對你有用,你應該嘗試實現自己的解析器:How to write a Parser in C#?

+0

+1最後一句話:) –

1

你所能做的就是處理這個的Microsoft Dynamics CRM處理這個在他們的高級查找方式:而不是讓用戶手動輸入自己的搜索字符串,他們有一個圖形用戶界面,當你搜索它時會變成適當的字符串。

enter image description here

我看到你正在此的人熟悉的語法。即使該人知道查詢如何工作,我仍然會採用這種方法:

  1. 從視覺表示而不是從文本中確定查詢的工作方式要容易得多。
  2. 即使您有語法經驗,使用起來也更容易。
  3. 語法錯誤很難製作,因爲語法是自動生成的。