2009-08-19 59 views
0

iam試圖在我的網站中實現Searchmachine。 Iam爲此使用Zend_Search_Lucene。Zend_Search_Luncene句柄Querys

該指數創建這樣的:

public function create($config, $create = true) 
{ 
    $this->_config = $config; 

    // create a new index 
    if ($create) { 
     Zend_Search_Lucene_Analysis_Analyzer::setDefault(
      new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive() 
     ); 

     $this->_index = Zend_Search_Lucene::create(APPLICATION_PATH . $this->_config->index->path); 
    } else { 
     $this->_index = Zend_Search_Lucene::open(APPLICATION_PATH . $this->_config->index->path); 
    } 
} 

{

public function addToIndex($data) 
    $i = 0; 

    foreach ($data as $val) { 
     $scriptObj = new Sl_Model_Script(); 
     $scriptObj->title = $val['title']; 
     $scriptObj->description = $val['description']; 
     $scriptObj->link = $val['link']; 
     $scriptObj->tutorials = $val['tutorials']; 
     $scriptObj->screenshot = $val['screenshot']; 
     $scriptObj->download = $val['download']; 
     $scriptObj->tags = $val['tags']; 
     $scriptObj->version = $val['version']; 
     $this->_dao->add($scriptObj); 
     $i++; 
    } 

    return $i; 
} 


/** 
    * Add to Index 
    * 
    * @param Sl_Interface_Model $scriptObj 
    */ 
    public function add(Sl_Interface_Model $scriptObj) 
    { 

     // UTF-8 for INDEX 

     $doc = new Zend_Search_Lucene_Document(); 
     $doc->addField(Zend_Search_Lucene_Field::text('title', $scriptObj->title, 'utf-8')); 
     $doc->addField(Zend_Search_Lucene_Field::text('tags', $scriptObj->tags, 'utf-8')); 
     $doc->addField(Zend_Search_Lucene_Field::text('version', $scriptObj->version, 'utf-8')); 
     $doc->addField(Zend_Search_Lucene_Field::text('download', $scriptObj->download, 'utf-8')); 
     $doc->addField(Zend_Search_Lucene_Field::text('link', $scriptObj->link)); 
     $doc->addField(Zend_Search_Lucene_Field::text('description', $scriptObj->description, 'utf-8')); 
     $doc->addField(Zend_Search_Lucene_Field::text('tutorials', $scriptObj->tutorials, 'utf-8')); 
     $doc->addField(Zend_Search_Lucene_Field::text('screenshot', $scriptObj->screenshot)); 
     $this->_index->addDocument($doc); 

    } 

但是當我試圖用查詢索引:

$首頁 - >找到('的WordPress 2.8。 1'。'*');

即時得到以下錯誤:

「非通配符需要在模式的開始。」

任何想法如何查詢像我這樣的字符串?對「wordpress」的查詢就像例外一樣工作。

回答

1

Lucene無法處理前導通配符,只能追蹤尾部。也就是說,它不支持這樣的查詢「告訴我,每個人的名字結尾爲‘ATT’」這將是像

FIRST_NAME:* ATT

只支持尾隨通配符。告訴我每個人的名字年底與 '馬'

FIRST_NAME開始:MA *

看到這個Lucene的FAQ條目:

http://wiki.apache.org/lucene-java/LuceneFAQ#head-4d62118417eaef0dcb87f4370583f809848ea695

存在對Lucene的2.1,但一個變通方法開發人員說它可能是「昂貴的」。

+0

謝謝,所以它只能查詢一個「單詞」? – opHASnoNAME 2009-08-19 17:31:09

+0

不,你可以查詢多個帶尾隨前綴的單詞,假設你想查找所有以「kine」或「dict」開頭的文檔,你可以這樣做: name:kine * OR name:dict * 基本上只是或者將這些條款放在一起。 這是否回答你的問題? – 2009-08-19 22:20:20