簡體   English   中英

如何將搜索詞解析為各種問題類型?

[英]How to parse a search term into the various question types?

我正在編寫一個內部應用程序,我們讓用戶做幾種不同類型的查詢。

該應用程序允許用戶通過以下任一鍵搜索數據庫:

  • 員工ID
  • 名字(第一個或最后一個)
  • companyId
  • status(workingFullTime,sickLeave,maternityLeave等)

蠻力的方法是簡單地為每種類型的查詢創建一個webform,並有一個菜單,用戶可以選擇要執行的查詢類型(這是ASP.NET)

但我想要的是有一個簡單的文本框,用戶輸入查詢,然后應用程序應解析查詢並自動選擇要發送到后端的查詢類型。

例如,employeeId是一個精確格式的數字。 所以我可以做一個正則表達式來匹配它。 對於status,companyId等也是如此。

所以我的問題是,如果這里有人可以提供一些建議,如何在C#中最好地編寫一個方法,它將采用一個字符串並將其與許多不同的正則表達式進行匹配。

干杯,Joakim

直接的方法是讓一系列if語句依次測試每個正則表達式:

if (Regex.Match(query, regex1)) {
    HandleFirstCase(query);
} else if(Regex.Match(query, regex2)) {
    HandleSecondCase(query);
} ... 
else {
    HandleFullTextSearch();
}

更復雜的方法是數據驅動方法,您可以將正則表達式和操作存儲在表中並循環遍歷它們:

public class RegexAction {
    public Regex Pattern { get; private set; }
    public Action<string> Handler { get; private set; }
    public RegexAction(Regex pattern, Action<string> handler) {
        this.Pattern = pattern;
        this.Handler = handler;
    }
}

public static RegexAction[] HandlerTable = new RegexAction[] {
    new RegexAction(regex1, HandleFirstCase),
    new RegexAction(regex2, HandleSecondCase),
    new RegexAction(regex3, HandleThirdCase),
    // ...
}

foreach(RegexAction action in HandlerTable) {
    if (action.Match(query)) {
        action.Handler(query);
        break;
    }
}

這有助於將重要數據,模式和操作與測試和調用的實現分開。

我要做的只是一個OR查詢:

select * from employee where employeeId = search OR name like "%search%" OR status = "search"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM