Lucene Autocomplete с несколькими словами, используя фильтр Shingle - PullRequest
2 голосов
/ 10 марта 2011


Я пытаюсь сделать автозаполнение Lucene, используя словарь Lucene и классы проверки орфографии, но пока успешно только для того, чтобы оно работало для отдельных терминов.

Я гуглил и обнаружил, что нам нужно использовать фильтр Shingle Matrix для выполнения работы. Может кто-нибудь, имеющий опыт работы с Lucene, покажет мне, как это сделать?

Все, что мне нужно, это генерировать слова для автозаполнения фраз.Например, если у меня есть такой документ: «Это длинная строка с очень длинной разглагольствованием и слишком большим количеством слов в ней», тогда я смогу генерировать такие слова, как «длинная строка», «длинная разглагольствование», «многиеслова "и т.д ...

возможно?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2013

Вы можете написать свой собственный анализатор, реализующий функцию TokenStream в наследовании класса Lucene.Net.Analysis.Analyzer. Там вы можете использовать этот shingleFilter, чтобы получить мультислово из Tokenstream Code Stream:

public override Lucene.Net.Analysis.TokenStream TokenStream(String fieldName, System.IO.TextReader       
reader)
   { 
      Lucene.Net.Analysis.TokenStream tokenStream = new     
      Lucene.Net.Analysis.Standard.StandardTokenizer(Lucene.Net.Util.Version.LUCENE_30, reader);  
      tokenStream = new Lucene.Net.Analysis.Shingle.ShingleFilter(tokenStream, maxShingleSize);
      return tokenStream;
   }

максимальный размер гальки определяет максимальную длину единицы из нескольких слов

0 голосов
/ 31 марта 2011

writer = new IndexWriter(dir,<br> new ShingleAnalyzerWrapper(new StandardAnalyzer(<br> Version.LUCENE_CURRENT,<br> Collections.emptySet()),3),<br> false,<br> IndexWriter.MaxFieldLength.UNLIMITED);

Это сделало всю работу за меня ...

...