Что лучше ? Одно большое поле или много маленьких?

Я собираюсь написать поисковую систему на основе Zend Search Lucène.

Мои объекты имеют много разных полей (10 типов текста), и я хотел бы знать, какой из этих способов лучше всего. (Все поля не сохранены, просто проиндексированы, мне не нужно их восстанавливать.)

Одно большое поле (конкатенация множества маленьких полей):

$content = $textfield1 . $textfield2 . $textfield3 . $textfield4 ...
Zend_Search_Lucene_Field::unStored("content", $content);

OR

Много маленьких полей:

Zend_Search_Lucene_Field::unStored("content", $textfield1);
Zend_Search_Lucene_Field::unStored("content2", $textfield2);
Zend_Search_Lucene_Field::unStored("content3", $textfield3);
....
....

Каждое поле может содержать много текста (около 500 слов и более).


person TeChn4K    schedule 09.02.2012    source источник


Ответы (1)


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

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

person Artur Nowak    schedule 09.02.2012