2013-07-11 20 views
0

Ниже приведено мое заявление о проблеме. Пожалуйста, дайте мне знать, как я могу достичь этого через Lucene 4.3.1. Я просмотрел разные запросы по умолчанию, но ничто, казалось, не соответствовало моему требованию. Если это невозможно в Lucene, есть ли другое программное обеспечение, которое может помочь мне в этом. Также обратите внимание, что у меня очень строгий поворот для этого, поэтому поиск нужно выполнить довольно быстро. Я смотрю около 10 миллисекунд при максимальномLucene поиск ключевых слов, встроенных в текст

У меня есть файл со списком имен (в формате - «имя», «второе имя», «фамилия»), может быть около 10K. Эти имена нужно индексировать, чтобы я мог выполнять поиск входящего запроса.

См., Например,

Список имен, которые будут индексироваться

  • Первого M Последнего
  • Первого MI Последнего
  • Первого N Las
  • и некоторых других названия

Случай 1: Ниже запрос должен возвращать First M Последний из индекса

  • Здравствуйте, как вы делаете в первую очередь M Последняя сегодня
  • Здравствуйте, как вы делаете последние первыми M сегодня
  • Здравствуйте, как вы делаете Lst M Первый сегодня

Случай 2: Ниже запроса ничего не нужно возвращать. Обратите внимание, что имена имеют другой текст между ними.

  • Здравствуйте, как вы doingFirst текст M некоторый текст Последний сегодня

Случай 3: я должен быть в состоянии сделать нечеткий поиск тоже. Ниже запроса следует вернуть First M Last из индекса.

  • Здравствуйте, как вы делаете Ferst M Последний сегодня
  • Здравствуйте, как вы делаете Последним Ferst M сегодня
  • Здравствуйте, как вы делаете Последнее M Ferst сегодня

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

+0

У меня возникли проблемы с тем, что вопрос. Можете ли вы подчеркнуть, что вы пробовали и что не работает с тем, что вы пробовали? – dlamblin

+0

Это похоже на очень обратный вариант использования.Несколько мыслей о реализации, чтобы убедиться, что используются только соседние элементы запроса, вам нужно либо выбрать соответствующий фрагмент запроса, либо, возможно, разделить его на [Shingles] (http: // lucene. apache.org/core/4_0_0/analyzers-common/org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapper.html) (хотя я бы избегал использовать подобные черепицы, если у вас есть альтернатива). Если вы спрашиваете, есть ли у Lucene какой-то класс, который будет обрабатывать разбор запроса с помощью той логики, которую вы ищете, я бы подумал, что нет. – femtoRgon

+0

Невозможно выбрать соответствующую часть запроса, так как вход может быть любым. Я смотрел на Шиллз, но они, похоже, не меняют порядок. И Да, похоже, что это не поддерживается из коробки. Единственное, о чем я мог подумать, это поставить все перестановки имен в индексе и найти точное совпадение. Это не кажется эффективным способом. Кроме того, это не сработает, если есть имя, которое состоит из десяти частей. В этом случае перестановка будет слишком дорогостоящей. – user2574133

ответ

0

Возможно, вам удастся запустить службу индексирования, например http://lucene.apache.org/solr/4_3_1/tutorial.html, и написать сценарии, чтобы заполнить ее своими данными и запросить ее по мере необходимости.

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

+0

Мое предположение, запросы, которые я опубликовал выше, являются входными данными, которые пользователь вводит. Для введенного пользователем ввода мне нужно подтянуть имя, которое присутствует в моем индексе. Также обратите внимание, что я ищу Lucene, чтобы я мог вставлять в свое приложение вместо отдельной службы, например, solr – user2574133

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