2013-07-22 5 views
0

Я индексирую журналы, включая уровни, и я устал от выполнения строкового запроса запроса "INFO OR DEBUG OR TRACE", есть ли какой-либо способ, специфичный для ElasticSearch или Lucene, чтобы указать диапазон, который не является числовым, поэтому я мог бы сделать что-то вроде "level:>=INFO"?Поиск по нечетному диапазону

+2

'INFO ИЛИ DEBUG ИЛИ TRACE' является единственным способом, имеет смысл сделать это , Каким образом любая технология сможет сделать вывод о том, что «DEBUG» и «TRACE» больше, чем «INFO»? Если вы устали переписывать одну и ту же логику запросов, создайте объект или фабрику, которая позаботится об этом для вас. – femtoRgon

+0

Мне было интересно, существует ли какая-то Enum, доступная Lucene, с упорядоченными элементами. Я предполагал, что нет, подумайте, что лучше спросить, прежде чем сдаться. – Nicholas

+1

Хорошо, я вижу, что вы после. Я не знаю ничего подобного, из коробки, но расширяя [MultiTermQuery] (https://lucene.apache.org/core/4_1_0/core/org/apache/lucene/search/MultiTermQuery.html) , и переопределите getTermsEnum, чтобы предоставить соответствующий [FilteredTermsEnum] (https://lucene.apache.org/core/4_1_0/core/org/apache/lucene/index/FilteredTermsEnum.html) для этого случая. – femtoRgon

ответ

0

В Lucene вы могли бы сделать это:

level:[DEBUG TO TRACE] 

, но это позволит любой уровень, который в алфавитном порядке между этими двумя (в том числе их, используйте {}, чтобы исключить).

Update: это может быть какое-то время до этого добавляется Solr (если он добавляется), но this issue бы то, что вам нужно

+0

Вы можете сделать то же самое с elasticsearch, а также использовать [диапазон запроса] (http://www.elasticsearch.org/guide/reference/query-dsl/range-query/), который также работает для строк. Но все же он будет опираться на буквенный порядок, который не тот, на что надеялся Николас. – javanna

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