Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Zend Lucene中,如何更改查询搜索的字段?_Php_Zend Framework_Zend Search Lucene - Fatal编程技术网

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实现非常缓慢。您仍然可以选择使用另一个搜索框架。我强烈建议你这样做。