2013-08-30 2 views
0

나는 내 사이트에 leucene.net을 사용하고 일부 단어를 훌륭하고 정확하게 색인하지만 "الله"과 같은 단어는 색인에 포함시키지 않습니다!Lucene이 일부 단어의 색인을 생성하지 않습니까?

나는 Luke가 색인을 생성 한 파일을 보았으며 "الله"이 색인되지 않았 음을 보여줍니다.

저는 색인 생성에 ArabicAnalyzer를 사용했습니다.

"مریم"을 검색하면 www.qoranic.com에서 내 사이트를 볼 수 있지만 "الله"을 검색하면 아무것도 표시되지 않습니다.

앞으로 어떤 아이디어라도 감사 할 것입니다.

답변

1

ArabicAnalyzer 입력에 대한 변환이 수행됩니다. 입력 اللهله으로 변환합니다. 정관사 부착, 결합 및 전치사

  • 제거 : 이는 ...

    로 정의 따른 문서화되어 ArabicStemFilter (및 ArabicStemmer)의 사용이다.

  • 일반적인 접미사의 줄무늬. 검색 할 때이 같은 토큰을 생산, 같은 분석을 통해 사용자 제공 쿼리를 구문 분석해야하기 때문에

이는 문제가되지 않을 것이다.

다음은 분석기가 주어진 입력에서 어떤 용어를 만들어 내는지 보여주기 위해 사용한 샘플 코드입니다.

using System; 
using Lucene.Net.Analysis.AR; 
using Lucene.Net.Analysis.Tokenattributes; 
using System.IO; 

namespace ConsoleApplication { 
    public static class Program { 
     public static void Main() { 
      var luceneVersion = Lucene.Net.Util.Version.LUCENE_30; 

      var input = "الله"; 
      var analyzer = new ArabicAnalyzer(luceneVersion); 

      var inputReader = new StringReader(input); 
      var stream = analyzer.TokenStream("fieldName", inputReader); 

      var termAttribute = stream.GetAttribute<ITermAttribute>(); 
      while(stream.IncrementToken()) { 
       Console.WriteLine("Term: {0}", termAttribute.Term); 
      } 

      Console.WriteLine("Done."); 
      Console.ReadLine(); 
     } 
    } 
} 

이 동작을 극복 ArabicAnalyzer가하는 것처럼하지만, ArabicStemFilter에 대한 호출없이 ArabicNormalizationFilter을 사용하는 사용자 지정 Analyzer를 작성하여 (형태소 제거) 할 수 있습니다.

public class CustomAnalyzer : Analyzer { 
    public override TokenStream TokenStream(String fieldName, TextReader reader) { 
     TokenStream result = new ArabicLetterTokenizer(reader); 
     result = new LowerCaseFilter(result); 
     result = new ArabicNormalizationFilter(result); 
     return result; 
    } 
} 
+0

당신이 옳았과 어떻게 ArabicAnalyzer 변경하는 것을 방지 할 수있다 "الله"하고 및에 "له"변경하지 않는 한 정확히 색인이 단어를? – MRP

관련 문제