Symfony and Zend Lucene Error


Symfony and Zend Lucene Error

我使用symfony与Zend Lucene搜索。我有

$query = Zend_Search_Lucene_Search_QueryParser::parse($query.'*');
$hits = self::getLuceneIndex()->find($query);

有时会出错:

pattern开头至少需要3个非通配符

当我在文档中创建like时:

$pattern = new Zend_Search_Lucene_Index_Term($query.'*');
$query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
$hits = self::getLuceneIndex()->find($query);

我不知道这是对的,但这对我来说是工作:

所以,在我的例子中,查询失败,因为它有<3个字符或有一些特殊字符,所以在我的搜索操作:

 public function executeAds(sfWebRequest $request)
  {
      if (!$query = $request->getParameter('query'))
    {
      return $this->forward('search', 'adssearch');
    }
   $query = str_replace(" ", "", $query);
   $query = preg_replace("/[^A-Za-z0-9]/","",$query);
    if (strlen(trim($query))<3)
    {
         $this->redirect('search/notice');
    }
    $this->ads = Doctrine_Core::getTable('Ads') ->getAdsLuceneQuery($query); 

我不使用

$pattern = new Zend_Search_Lucene_Index_Term($query.'*');
$query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
$hits = self::getLuceneIndex()->find($query);

因为这对我来说不是工作。

直接取自Zend Reference文档,您可以使用:

  • Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength() to查询最小前缀长度和
  • 使用Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength()来设置。

所以我的建议是:

  1. 使用Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength(0)设置prefixMinLength为0 -基于此,您的原始代码片段应该工作良好(它为我的Zend Lucene实现)

  2. 正如您自己建议的那样,使用javascript或其他方式验证所有搜索查询,以确保在使用任何通配符之前至少有Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength()(我建议查询而不是假设默认的"3",因此验证是灵活的)