2009-07-02 51 views
6

我正在使用Zend_Search_Lucene,Java Lucene的PHP端口。我目前有一些代碼將根據字符串數組構建搜索查詢,查找至少有一個索引字段與提交的每個字符串匹配的結果。簡化的,它看起來像這樣:Lucene中的多項通配符查詢?

(注:$的話是從用戶輸入構造一個數組。)

$query = new Zend_Search_Lucene_Search_Query_Boolean(); 
foreach ($words as $word) { 
    $term1 = new Zend_Search_Lucene_Index_Term($word, $fieldname1); 
    $term2 = new Zend_Search_Lucene_Index_term($word, $fieldname2); 
    $multiq = new Zend_Search_Lucene_Search_Query_MultiTerm(); 
    $multiq->addTerm($term1); 
    $multiq->addTerm($term2); 
    $query->addSubquery($multiq, true); 
} 
$hits = $index->find($query); 

我會喜歡做的是與($替換$字 '*') - 在每個單詞的末尾添加一個星號,將其變爲通配術語。

但隨後,$ multiq必須是一個Zend_Search_Lucene_Search_Query_Wildcard而不是Zend_Search_Lucene_Search_Query_MultiTerm,我不認爲我會仍然能夠多Index_Terms添加到每個$ multiq

有沒有辦法構建一個既是通配符又是MultiTerm的查詢?

謝謝!

回答

5

不礙事,你希望實現它,可惜的是:

Lucene支持內 單條款單個和多個 字符匹配的(但不是內詞組 查詢)。

即使有可能,很可能不是一個好主意:

通配符,範圍和模糊搜索 查詢可以匹配太多的條款。它 可能會導致令人難以置信的搜索 性能降級。

我想象一下,如果你堅持使用多個通配符術語,將兩個執行兩個單獨的搜索,每個通配術語一個,並將結果捆綁在一起。