Я новичок в Lucene, и мой проект заключается в предоставлении специализированного поиска для набора
буклетов. Я использую Lucene Java 3.1.
Основная идея состоит в том, чтобы помочь людям узнать, где искать информацию в (скорее
большие и сухие) буклеты, проконсультировавшись с индексом, чтобы узнать, какие номера буклетов и страниц соответствуют их запросу. Каждый документ в моем указателе представляет определенную страницу в одном из буклетов.
До сих пор я был в состоянии успешно вычистить необработанный текст из буклетов,
вставить его в индекс и запросить его в порядке, используя StandardAnalyzer на обоих
заканчивается.
Итак, вот мой общий вопрос:
Многие запросы в индексе будут включать поиск названий мест, упомянутых в
буклеты. В некоторых географических названиях используются нотационные варианты. Например, в основном тексте
на одной странице он будет называться «Корабль-Крик», но на диаграмме карты в другом месте он может быть указан как «Корабль-Кр.» или даже "Корабль СК". Мне нужно знать, как подходить к тому, чтобы рассматривать два последовательных слова как один термин и добавлять нотационные варианты в качестве синонимов.
Моя цель, конечно, найти любой из вариантов и отловить все вхождения. Если я ищу (Корабль И (Cr Ck Creek)), это не дает мне того, что я хочу, потому что другие слова могут появляться между [ship] и [cr] / [ck] / [creek], приводя к ложному срабатыванию.
Итак, в двух словах, мне, вероятно, все еще нужны базовые вещи, предоставляемые StandardAnalyzer, но с определенной группировкой терминов, чтобы выдавать географические названия в виде полных терминов и, возможно, вставить синонимы для охвата вариантов.
Например, текст "... разрешенный от устья Шип-Крик вверх по течению до ..." будет
в результате получаются жетоны [позволено], [рот], [корабельный залив], [вверх по течению]. Возможно через TokenFilter
Кстати, термин [корабельный ручей] расширился бы до [корабельный ручей] [корабельный ск] [корабельный кр].
В качестве бонуса было бы неплохо отнестись к более сложному тексту "... за исключением кораблей, птиц и
Кэмпбелл ручьи, где предел ... ", как [кроме], [Крик корабля], [Крик птицы],
[Кэмпбелл-Крик], [где], [предел].
Это похоже на довольно простой вариант использования, но мне не ясно, как я мог бы использовать существующие компоненты из Lucene contrib или SOLR для достижения этой цели. Должно ли обнаружение и объединение выполняться в каком-то TokenFilter? Нужна ли пользовательская реализация Analyzer?
Некоторые из терминов группировки, вероятно, могут быть выполнены эвристически [], [ручей] - это [ ручей]
но у меня также есть исчерпывающий список мест, упомянутых в тексте, если это поможет.
Спасибо за любую помощь, которую вы можете предоставить.