2013-08-30 2 views
0

Я использую leucene.net для своего сайта, и он индексирует некоторые слова в порядке и правильном, но не индексирует некоторые слова типа «الله»!Lucene не индексирует некоторые слова?

У меня есть индексный файл с Luke, и он показывает, что «الله» не индексируется.

Я использовал ArabicAnalyzer для индексирования.

вы можете увидеть мой сайт на www.qoranic.com, если вы ищете «مریم», это будет нормально, но если вы ищете «الله», он ничего не показывает.

любая идея оценивается в пересылке.

ответ

1

ArabicAnalyzer выполняет некоторую трансформацию на этот вход; он преобразует вход الله в له. Это связано с использованием в ArabicStemFilterArabicStemmer), который документально с ...

Морфологический определяется как:

  • Удаление прикрепленного артикля, конъюнкции и предлоги.
  • Обводка общих суффиксов.

Это не должен быть проблемой, так как вы должны быть разбора при условии пользовательского запроса через тот же анализатор при поиске, производя ту же лексему.

Вот пример кода, который я использовал, чтобы посмотреть, какие термины производит анализатор с данного входа.

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(); 
     } 
    } 
} 

Вы можете преодолеть это поведение (удалить забойный) путем написания пользовательских Analyzer, который использует ArabicNormalizationFilter, так же, как ArabicAnalyzer делает, но без вызова ArabicStemFilter.

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

Смежные вопросы