Можно ли использовать Lucene в качестве движка правил? - PullRequest
0 голосов
/ 23 января 2020

Я использую Lucene в качестве поисковой системы для следующего требования:

Здесь есть миллионы документов (текстовых файлов).

В каждом текстовом файле есть тысячи слов (простые строки с разделенным пробелом) ).

Пример содержимого текстового файла 1 (просто несколько слов): 0001AAA 0001AAB 0001AA C 0061000 PSBP06 MFBP05 ...

Пример содержимого текстового файла 2 (просто показывает несколько слов): 0001AAX 0001AAB 0001AAN 0061002 PSBP07 MFBP06 ...

Тогда в базе данных собраны миллионы правил. Для простоты понимания я задаю несколько правил ниже:

Правило 1:

СОСТОЯНИЕ 1: С: 0001AAA ИЛИ 0001AA C

СОСТОЯНИЕ 2: С: PSBP06 ИЛИ PSBP07

СОСТОЯНИЕ 3: С: MFBP05

Правило 2:

СОСТОЯНИЕ 1: С: 0001AAN ИЛИ 0001AA C

СОСТОЯНИЕ 2: С: PSBP06

СОСТОЯНИЕ 3: С: PSBP08

СОСТОЯНИЕ 4: НЕ С: MFBP05

Требование, для данного Правило, найдите текстовые файлы, соответствующие по крайней мере одному слову в каждом условии правила.

Я проиндексировал содержимое каждого текстового файла как документ Lucene с полем «FileContents» и другим полем, чтобы просто сохранить файл name.

Итак, для Правила 1 я построил запрос как (0001AAA ИЛИ 0001AA C) И (PSBP06 ИЛИ PSBP07) И (MFBP05)

И для Правила 2 запрос является (0001AAN ИЛИ 0001AA C) И (PSBP06) И (PSBP08) И НЕ (MFBP05).

Запросы работают и могут найти соответствующие текстовые файлы.

Теперь у меня есть другое требование, обратное вышеуказанному требованию. т.е. для данного текстового файла мне нужно найти список правил, которые могут соответствовать.

Пример: для текстового файла 1 «Правило 1» должно соответствовать, потому что текстовый файл 1 имеет 0001AAA, который удовлетворяет условию 1, PSBP06 будет удовлетворять условию 2, MFBP05 будет удовлетворять условию 3.

Правило 1 имеет 3 условия, и по крайней мере одно слово в каждом условии соответствует текстовому файлу 1. Таким образом, правило 1 подходит для текстовый файл 1.

Правило 2 не должно совпадать с текстовым файлом 1, поскольку в нем нет PSBP08.

Я не знаю, могу ли я проиндексировать информацию о "Правиле" в Lucene. Правило может иметь 1 или более условий, поэтому я не могу использовать фиксированное количество полей для запроса. Даже если число полей фиксировано, запрос должен проверять, чтобы каждое поле совпадало хотя бы с одним словом. Можно ли выполнить это требование с помощью Lucene? или я должен go для других вариантов?

Я новичок в Lucene, любая помощь будет оценена.

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