PerFieldAnalyzerWrapper.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:3k
源码类别:

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2004 The Apache Software Foundation
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16. using System;
  17. namespace Lucene.Net.Analysis
  18. {
  19. /// <summary> This analyzer is used to facilitate scenarios where different
  20. /// fields require different analysis techniques.  Use {@link #addAnalyzer}
  21. /// to add a non-default analyzer on a field name basis.
  22. /// 
  23. /// <p>Example usage:
  24. /// 
  25. /// <pre>
  26. /// PerFieldAnalyzerWrapper aWrapper =
  27. /// new PerFieldAnalyzerWrapper(new StandardAnalyzer());
  28. /// aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
  29. /// aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
  30. /// </pre>
  31. /// 
  32. /// <p>In this example, StandardAnalyzer will be used for all fields except "firstname"
  33. /// and "lastname", for which KeywordAnalyzer will be used.
  34. /// 
  35. /// <p>A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing
  36. /// and query parsing.
  37. /// </summary>
  38. public class PerFieldAnalyzerWrapper:Analyzer
  39. {
  40. private Analyzer defaultAnalyzer;
  41. private System.Collections.IDictionary analyzerMap = new System.Collections.Hashtable();
  42. /// <summary> Constructs with default analyzer.
  43. /// 
  44. /// </summary>
  45. /// <param name="defaultAnalyzer">Any fields not specifically
  46. /// defined to use a different analyzer will use the one provided here.
  47. /// </param>
  48. public PerFieldAnalyzerWrapper(Analyzer defaultAnalyzer)
  49. {
  50. this.defaultAnalyzer = defaultAnalyzer;
  51. }
  52. /// <summary> Defines an analyzer to use for the specified field.
  53. /// 
  54. /// </summary>
  55. /// <param name="fieldName">field name requiring a non-default analyzer
  56. /// </param>
  57. /// <param name="analyzer">non-default analyzer to use for field
  58. /// </param>
  59. public virtual void  AddAnalyzer(System.String fieldName, Analyzer analyzer)
  60. {
  61. analyzerMap[fieldName] = analyzer;
  62. }
  63. public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
  64. {
  65. Analyzer analyzer = (Analyzer) analyzerMap[fieldName];
  66. if (analyzer == null)
  67. {
  68. analyzer = defaultAnalyzer;
  69. }
  70. return analyzer.TokenStream(fieldName, reader);
  71. }
  72. public override System.String ToString()
  73. {
  74. // {{Aroush-1.9}} 'analyzerMap.ToString()' may return a different value then Java.
  75. return "PerFieldAnalyzerWrapper(" + analyzerMap.ToString() + ", default=" + defaultAnalyzer + ")";
  76. }
  77. }
  78. }