2011-07-13 53 views
0

我使用symfony和Zend Lucene Search。我有Symfony和Zend Lucene錯誤

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

有時候,我有錯誤:

至少有3個非通配符需要在模式的開始。

當我做出這樣的單證:

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

它覺得沒有什麼。

+0

我得到同樣的錯誤...任何想法 – mymotherland

+0

@Dinesh,我張貼我的決定,這對我的作品) – denys281

+0

查收這個http://stackoverflow.com/questions/6817081/面對發放功能於Zend的檢索用lucene的。並幫助我 – mymotherland

回答

1

我也不是它的權利,但它是我的工作:

因此,查詢失敗在我的情況,因爲它有< 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); 

因爲它不是爲我工作。

1

直接從Zend Reference documentation兩者,你可以使用:

  • Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength()到 查詢所需的最小前綴長度和
  • 使用Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength()到 設置。

所以我的建議是,要麼兩件事情:使用Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength(0)

  1. 設置prefixMinLength 0 - 在此基礎上,你原來的代碼段應工作正常(它確實爲我的Zend Lucene的實施)

  2. 正如你所說,使用JavaScript驗證所有搜索查詢或以其他方式以確保沒有使用任何通配符前至少Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength()(我建議查詢是「3」,所以validati,而不是假設的默認在靈活)