Поле Lucene из TokenStream с сохраненными значениями - PullRequest
3 голосов
/ 21 декабря 2010

У меня есть поле, которое должно прийти из потока токенов;его нельзя создать с помощью строки, а затем проанализировать в токены.Например, мне может потребоваться объединить данные из нескольких столбцов (в моей РСУБД) в одно поле Lucene, но я хочу проанализировать каждый столбец по-своему.Поэтому я не могу просто объединить их все в одну строку, а затем проанализировать полученную строку.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что поля, созданные из потоков токенов, не могут быть сохранены, что имеет смысл в общем случае, так какПоток может не иметь очевидного строкового представления.Тем не менее, я знаю строковое представление, и я хотел бы сохранить его.

Я пытался добавить одно и то же поле дважды, один раз, когда оно сохранялось и содержало строковые данные, и один раз, когда оно приходило из потока токенов, нокажется, что это не может быть сделано.Помимо какого-то хака, например добавления поля с именем «myfield__stored», есть ли способ сделать это?

Я использую 2.9.2.

1 Ответ

3 голосов
/ 23 декабря 2010

Я нашел способ.Вы можете проникнуть внутрь, создав его как обычное поле, но вызвав SetTokenStream позже:

Field f = new Field(Name, StringValue, Store, Analyzed, TV);
f.SetTokenStream(TokenStreamValue);

Поскольку значение считывателя / строки индексируется, только если значение потока токенов равно нулю, значение потока токенов будетбыть проиндексирован.Методы store смотрят на строку / считыватель независимо от потока токенов, поэтому именно это значение будет сохранено.

...