Индексация выражений из n слов как единственного термина в Lucene - PullRequest
4 голосов
/ 25 сентября 2010

Я хочу индексировать «составное слово», такое как «Нью-Йорк», как единственный термин в Lucene, а не как «новый», «йорк». Таким образом, если кто-то ищет «новое место», документы, содержащие «Нью-Йорк», не будут совпадать.

Я думаю, что это не так для N-граммов (на самом деле NGramTokenizer), потому что я не буду индексировать только любой n-грамм, я хочу индексировать только некоторые конкретные n-граммы.

Я провел некоторые исследования и знаю, что должен написать свой собственный анализатор и, возможно, свой собственный токенизатор. Но я немного растерялся, расширяя TokenStream / TokenFilter / Tokenizer.

Спасибо

Ответы [ 2 ]

1 голос
/ 26 сентября 2010

Полагаю, у вас есть какой-то способ определения единиц из нескольких слов (MWU), которые вы хотите сохранить. Тогда вы можете заменить пробел в них подчеркиванием и использовать WhiteSpaceAnalyzer вместо StandardAnalyzer (что исключает пунктуацию), возможно, с LowerCaseFilter.

Для написания собственного Tokenizer требуется довольно много черной магии Lucene. Я никогда не мог обернуть голову вокруг API Lucene 2.9+, но посмотрите документы TokenStream, если вы действительно хотите попробовать.

0 голосов
/ 29 сентября 2010

Я сделал это, создав поле, которое проиндексировано, но не проанализировано.Для этого я использовал Field.Index.NOT_ANALYZED> doc.add (новое поле («fieldName», «value», Field.Store.YES, Field.Index.NOT_ANALYZED, TermVector.YES));Стандартный анализатор.

Я работал на Lucene 3.0.2.

...