Как сохранить несколько целочисленных значений в ключевом слове Zend search lucene? - PullRequest
2 голосов
/ 21 сентября 2011

Я хотел бы добавить слой люцены в мою модель базы данных.Все работает отлично, и я использую несколько ключевых слов, помимо основного контента, который заполнен некоторыми данными HTML.

например,

$doc = Zend_Search_Lucene_Document_Html::loadHTML($html);
$doc->addField(Zend_Search_Lucene_Field::keyword('author_id', 1));

У меня есть таблица 1: N с некоторыми данными, которые я хотел быиспользовать также для фильтрации результатов поиска.Давайте предположим, что документ представляет собой статью, которая может быть опубликована в разных категориях.Теперь у меня есть массив идентификаторов категорий, которые я как-то хочу добавить в этот документ.Мой первый подход состоял в том, чтобы просто взорвать массив и сохранить его в виде строки:

$doc->addField(Zend_Search_Lucene_Field::keyword('categories', '12, 15, 22'));

Но поиск оказался немного сложным (поиск категории 1 также дал 12 и 15).Затем я создал несколько «магических» строк, таких как CAT_12_A вместо 12, чтобы сделать их уникальными:

$doc->addField(Zend_Search_Lucene_Field::keyword('categories', 'CAT_12_A, CAT_15_A, CAT_22_A'));

Это работает довольно хорошо, но я не совсем доволен этим решением, потому что это, очевидно, хак.Есть ли шанс добавить многозначное «ключевое слово» в документ Zend Lucene без такого странного взлома?

Спасибо за помощь.

1 Ответ

1 голос
/ 21 февраля 2012

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

Вы пробовали

$doc->addField(Zend_Search_Lucene_Field::keyword('category_1', '12' ));
$doc->addField(Zend_Search_Lucene_Field::keyword('category_2', '15' ));
$doc->addField(Zend_Search_Lucene_Field::keyword('category_3', '22' ));

? Похоже, что query () будет искать по всем полям, так что, если вам все равно, какие поля совпадают, у вас все должно быть в порядке?

...