Каков наилучший выбор для индексации логического значения в lucene? - PullRequest
15 голосов
/ 12 марта 2012

Индексирование логического значения (true / false) в lucene (не нужно хранить) Я хочу получить больше дискового пространства и повысить производительность поиска

doc.add(new Field("boolean","true",Field.Store.NO,Field.Index.NOT_ANALYZED_NO_NORMS));
//or
doc.add(new Field("boolean","1",Field.Store.NO,Field.Index.NOT_ANALYZED_NO_NORMS));
//or
doc.add(new NumericField("boolean",Integer.MAX_VALUE,Field.Store.NO,true).setIntValue(1));

Что мне выбрать? Или какой-нибудь другой лучший способ?

Большое спасибо

Ответы [ 3 ]

10 голосов
/ 12 марта 2012

Интересный вопрос!

  • Не думаю, что третий вариант (NumericField) - это хороший выбор для логического поля.Я не могу придумать ни одного варианта использования для этого.
  • Индекс поиска Lucene (оставляя в стороне сохраненные данные, которые вы не используете в любом случае) сохраняется в виде инвертированного индекса
  • Оставляя ваш первый и второй варианты как (теоретически) одинаковыми

Если бы я столкнулся с этим, я думаю, что я бы выбрал первый вариант (термины «истина» и «ложь»), если он влияет на окончательный вариантрешение.

Ваш выбор NOT_ANALYZED_NO_NORMS выглядит неплохо, я думаю.

3 голосов
/ 30 марта 2012

Использование Solr (разновидность люцена) - изначально индексирует все основные типы Java.

Я использовал это, и оно качается.

2 голосов
/ 30 марта 2012

Lucene перепрыгивает через тщательно продуманный набор обручей, чтобы сделать NumericField доступным для поиска по NumericRangeQuery, поэтому определенно избегайте этого во всех случаях, когда ваши значения не представляют количества.Например, даже если вы индексируете целое число, но только как уникальный идентификатор, вы все равно захотите использовать простое поле String.Использование «true» / «false» является наиболее естественным способом индексирования логического значения, в то время как использование «1» / «0» дает лишь небольшое преимущество, исключая возможность несоответствия регистра или опечатки.Я бы сказал, что это преимущество не стоит много и пошел бы за истиной / ложью.

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