Что лучше ? Одно большое поле или много маленьких? - PullRequest
2 голосов
/ 09 февраля 2012

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

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

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

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

ИЛИ

Множество небольших полей:

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

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

1 Ответ

2 голосов
/ 10 февраля 2012

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

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

...