寫Lucene.Net – Custom Synonym Analyzer類似SynonymAnalyzer
自己的自定義分析類。您覆蓋TokenStream
可以通過使用WhitespaceTokenizer
和LowerCaseFilter
流水線來解決此問題。
請記住,您的索引器和搜索器需要使用相同的分析器。
更新:處理多用逗號分隔的關鍵字
如果你只需要處理unspaced逗號分隔的關鍵字搜索,不是索引那麼你可以轉換爲下面的搜索表達式expr
。
expr = expr.Replace(',', ' ');
然後通過expr
到QueryParser
。如果您想支持其他分隔符,如';'你可以做這樣的:
var terms = expr.Split(new char[] { ',', ';'});
expr = String.Join(" ", terms);
但你還需要檢查對於喜歡「SYBASE,C#.NET,神諭」一語表達(表達包括引號「字符),它不應該被轉換(在用戶正在尋找一個精確匹配):
expr = expr.Trim();
if (!(expr.StartsWith("\"") && expr.EndsWith("\"")))
{
expr = expr.Replace(',', ' ');
}
的表達可能包括一個短語,一些關鍵字,像這樣:
"sybase,c#,.net,oracle" server,c#,.net,sybase
然後,你需要解析和轉換搜索表達式如下:
"sybase,c#,.net,oracle" server c# .net sybase
如果您還需要處理unspaced逗號分隔的關鍵字索引那麼你需要解析的unspaced逗號分隔關鍵字的文本,並將它們存儲在不同的領域如。 Keywords
(必須與您的自定義分析器關聯)。那麼您的搜索處理程序需要搜索表達式轉換是這樣的:
server,c#,.net,sybase
這樣:
Keywords:server Keywords:c# Keywords:.net, Keywords:sybase
或者更簡單地說:
Keywords:(server, c#, .net, sybase)
是你的域名源代碼?或者那些僅僅是例子? – phani 2013-03-03 02:43:05
@phani這些僅僅是示例 – Kumar 2013-03-07 16:28:24