2016-01-12 5 views
0

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

Field("Id", Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO)); 
Field("From", Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO)); 
Field("To", Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO)); 
Field("Source", Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO)); 
Field("Target", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES)); 

Одним из требований, у меня есть, чтобы повторно использовать документы, если С, Для и Источник точно так же (чувствительно к регистру).

Однако они не анализируются (например, с помощью StandardAnalyzer, который сокращает сроки до индексирования).

  1. Можно ли использовать регистр без учета регистра, не анализируемый полей?
  2. Как насчет Field Значения имен, могу ли я также сделать случай Нечувствительный поиск к «От», «от», «ОТ»?

Общая информация: Я хочу выполнить поиск без учета регистра.

Пример: «From: something», «from: Something», «FROM: SOMething», «from: SOMETHING» -> получить тот же набор результатов.

ответ

1

1 - Нет. Вы всегда можете ввести строчные буквы перед индексацией или проанализировать их с помощью анализатора, состоящего из KeywordTokenizer и LowerCaseFilter. Как вы индексируете в Lucene, очень важна операция GIGO. Если способ анализа и индексации полей не позволяет использовать ваши поисковые запросы, у вас будет непростое время.

2 - Опять же, нет (не то, что я знаю в любом случае). Вам нужно было обработать это в коде. Если вы всегда используете имена полей в нижнем регистре, это должно быть достаточно простым, чтобы нормализовать его.

+0

Если я проанализирую все поля с ключевым словомTokenizer, которые раньше не анализировались, будет ли он потреблять намного больше места, учитывая, что некоторые из них могут иметь размер 2 абзаца текста. Идея этого заключается в том, чтобы иметь возможность выполнять нечеткое совпадение и точное совпадение в поле источника для ex. У меня есть тот же текст в поле SourceExact, который не анализируется, и поле SourceFuzzy анализируется (StandardAnalyzer). Вот почему я хочу выполнять независимые от регистра запросы в поле SourceExact. –

+0

@pelican_george - Нет, не должно влиять на пространство. Анализ поля с помощью KeywordAnalyzer и оставление поля неанализируемого поля практически идентичны. Добавление «LowerCaseFilter» могло бы теоретически уменьшить размер индекса, но на практике с длинными полями, вероятно, вообще не повлияет на размер. – femtoRgon

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