Lucene номер извлечения - PullRequest
       22

Lucene номер извлечения

2 голосов
/ 20 апреля 2009

У меня проблема с извлечением этого числа. Я хочу получить все совпадения, в которых нет определенного числа например: 125501874, 125001873 Каждое число, равное 55 в позиции 2, не должно учитываться.

Первый диапазон чисел от 0 до 9, а второй от 1 до 9, поэтому реальный диапазон составляет [01-99] (мы не можем иметь 00 в качестве первых двух чисел)

В Lucene я хотел добавить поле НЕ: [01-99] 55 *

Но, похоже, это не работает. Есть ли простой способ найти ?? 55 * и игнорировать его в поиске ("НЕ поле: [01-99] 55 *")?

Спасибо, гуру Lucene

Ответы [ 2 ]

4 голосов
/ 20 апреля 2009

Lucene может сделать это очень эффективно, если создать поле «только для индекса», содержащее только третью и четвертую цифры. Полное значение может быть «сохранено» (или сохранено и проиндексировано, если другие запросы используют целое число) в исходном поле.


Обновление: Последующий комментарий спросил: "Есть ли способ создать временный индекс только для второй цифры?"

Использование ParallelReader «вертикально разделенных» полей индекса. Один раздел может содержать текущий индекс со своими полями, а другой - временный индекс с новым полем, возможно, сохраненный в RAMDirectory.

Предполагая, что число «сохранено» в исходном индексе, переберите каждый документ в исходном индексе, извлеките сохраненное поле, проанализируйте ключевые цифры и добавьте Document к временному индексу с новым полем. Как указано в документации ParallelReader, обязательно, чтобы номера документов совпадали в обоих индексах.

2 голосов
/ 24 апреля 2009

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

Но, как вы сказали ранее, лучше сразу начать с указателя на соответствующие цифры.

У меня есть другое решение.

NOT field:0?55*
NOT field:1?55*
...
NOT field:9?55*

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

...