我想在我的数据库模型上添加一个lucene层。一切正常,我在主要内容旁边使用了几个关键字,这些关键字由一些HTML数据填充。
e.g。
$doc = Zend_Search_Lucene_Document_Html::loadHTML($html);
$doc->addField(Zend_Search_Lucene_Field::keyword('author_id', 1));
我有一个1:N表,其中包含一些我想用来过滤搜索结果的数据。我们假设该文档是一篇可以在不同类别中发布的文章。我现在有一个类别ID数组,我想以某种方式添加到此文档中。我的第一种方法是将数组内爆并将其保存为字符串:
$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文档中添加多值“关键字”而没有这么奇怪的黑客攻击?
感谢您的帮助。
答案 0 :(得分:1)
我在找到你的问题之后做了很多谷歌搜索:看起来没有办法直接添加多值字段而不修改zend框架核心代码。
你试过吗
$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' ));
?看起来查询()将搜索所有字段,所以如果你不关心哪个字段匹配你应该没问题?