Lucene: Как сделать поиск по шаблону внутри термина? - PullRequest
0 голосов
/ 10 июня 2009

У меня следующий индекс люцена:

Document A
item = level:(1)
item = level:(2)
item = level:(3)

Document B
item = level:(1)
item = level:(4)

Предположим, я хочу найти все документы, содержащие уровень: (1) И уровень: (2)?

Запрос Lucene может выглядеть следующим образом:

"item:level\:\(1\) AND level\:\(2\)"

но возможно ли сделать что-то вроде этого:

"item:level\:\(1 OR 2\)"

(причина в том, что я не хочу повторять строку "level\:")

1 Ответ

0 голосов
/ 10 июня 2009

Самое простое решение было бы сделать level полем по умолчанию вашего анализатора запросов, позволяя уменьшить ваш запрос до:

(1 OR 2)

Однако я подозреваю, что это не совсем то, что вы ищете ...

Согласно документации синтаксического анализатора запросов Lucene *1008*, то, что вы запрашиваете, не может быть выполнено с помощью логических операторов (AND и OR). Однако, похоже, что это возможно при использовании операторов плюс (+) и минус (-). Согласно документации:

Lucene поддерживает использование скобок для группировки нескольких предложений в одно поле.

Чтобы найти заголовок, содержащий слово «возврат» и фразу «розовая пантера», используйте запрос:

title:(+return +"pink panther")

Это не совсем то, что вы ищете, но это может подойти. Я не уверен, как именно таким образом будет написано предложение OR.

...