Объединение числового запроса диапазона с запросом термина в Lucene

Я хотел бы объединить числовой запрос диапазона с запросом термина в Lucene. Например, я хочу искать документы, которые я индексировал, которые содержат между 10 и 20 страницами и имеют заголовок "Привет Мир".

Это, кажется, возможно не использует QueryParser для генерации этого запроса для меня; запрос диапазона, который генерирует QueryParser, кажется, текст один.

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

Спасибо

12
задан Chris J 14 July 2010 в 23:06
поделиться

2 ответа

Похоже, я сам догадался до этого. Вы можете использовать Query.combine() для объединения запросов. Я привел пример ниже.

String termQueryString = "title:\"hello world\"";
Query termQuery = parser.parse(termQueryString);

Query pageQueryRange = NumericRangeQuery.newIntRange("page_count", 10, 20, true, true);

Query query = termQuery.combine(new Query[]{termQuery, pageQueryRange});
11
ответ дан 2 December 2019 в 19:30
поделиться
RangeQuery amountQuery = new RangeQuery(lowerTerm, upperTerm, true);

Lucene обрабатывает числа как слова, поэтому числа упорядочены в алфавитном порядке.

1
12
123
1234
etc.

При этом вы все еще можете использовать запрос диапазона, вам просто нужно быть более умным.

Чтобы правильно запрашивать числовые значения, вам нужно дополнить ваши целые числа одинаковыми длинами (независимо от вашего максимального поддерживаемого значения)

0001
0012
0123
1234

Очевидно, это не работает для отрицательных чисел (поскольку -2 <-1) , и, надеюсь, вам не придется с ними иметь дело. Вот полезная статья о негативах, если вы с ними столкнетесь: http://wiki.apache.org/lucene-java/SearchNumericalFields

0
ответ дан 2 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: