Php 在Zend Lucene中,如何更改查询搜索的字段?
我正在尝试创建一个“高级搜索”,我可以让用户只搜索我索引的特定字段。为此,我使用了一个布尔查询:Php 在Zend Lucene中,如何更改查询搜索的字段?,php,zend-framework,zend-search-lucene,Php,Zend Framework,Zend Search Lucene,我正在尝试创建一个“高级搜索”,我可以让用户只搜索我索引的特定字段。为此,我使用了一个布尔查询: $sq1 = Zend_Search_Lucene_Search_QueryParser::parse($field1); // <- provided by user $sq2 = Zend_Search_Lucene_Search_QueryParser::parse($field2); // <- provided by user $query = new Zend_Search
$sq1 = Zend_Search_Lucene_Search_QueryParser::parse($field1); // <- provided by user
$sq2 = Zend_Search_Lucene_Search_QueryParser::parse($field2); // <- provided by user
$query = new Zend_Search_Lucene_Search_Query_Boolean();
$query->addSubquery($sq1, true);
$query->addSubquery($sq2, true);
$index->find($query);
$sq1=Zend_Search_Lucene_Search_QueryParser::parse($field1);//addSubquery($sq2,true);
$index->find($query);
如何指定sq1将搜索字段“foo”,而sq2将搜索字段“bar”
我觉得我应该以不同的方式解析查询以获得效果(因为用户可能会键入字段名),但文档中只提到用于将用户输入查询与API查询连接起来的QueryParser。您需要的是查询构造API:
然而,我建议你完全放弃Zend_Search_Lucene。Java实现非常出色,但PHP实现非常糟糕。关于您试图做的事情,它的行为非常糟糕,请参见问题1508748。它也非常非常慢。似乎最简单的方法就是伪造用户输入:
$sq1 = Zend_Search_Lucene_Search_QueryParser::parse("foo:($field1)");
$sq2 = Zend_Search_Lucene_Search_QueryParser::parse("bar:($field2)");
$field1和$field2应该事先去掉括号和冒号,以避免“搜索注入”。问题在于API没有解释如何做到这一点。如何获取用户输入并将其转换为多项查询,而无需手动标记?我意识到PHP搜索引擎不是一个好主意,但我现在正在寻找易于实现的方法,如果以后出现问题,我将进行迁移。在这种情况下,您似乎别无选择,只能使用Ilia Jerebtsov提供的解决方案。同样,请注意PHP实现非常缓慢。您仍然可以选择使用另一个搜索框架。我强烈建议你这样做。