検索には zend lucene を使用します。そのコードでインデックスを作成します
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::text('word_id', $word['id']));
$boostField = Zend_Search_Lucene_Field::text('priority', $word['priority']);
$doc->addField($boostField);
$doc->addField(Zend_Search_Lucene_Field::unStored('description', $word['name'], 'UTF-8'));
$index->addDocument($doc);
そのコードで検索文字列を解析します。
$query= str_replace(array('-','!','@','#','$','%','^','&','*','(',')'), ' ', $query);
$query = trim($query);
$words = explode(" ", $query);
unset($query);
$query = "";
foreach ($words as $word) {
$query.='(' . $word . '*)';
if ($word != end($words)) {
$query.=' AND ';
}
}
return $query;
そのコードで検索します。
try {
Zend_Search_Lucene::setResultSetLimit($limit);
$index = Zend_Search_Lucene::open($this->_indexPath);
} catch (Exception $e) {
return false;
}
try {
return $index->find($query, 'score', SORT_NUMERIC, SORT_DESC, 'priority', SORT_NUMERIC, SORT_ASC);
} catch (Exception $e) {
return false;
}
だから、私の問題-私は次のようないくつかのフィールドをインデックスに持っています:nootebook用の黒いバッグ、nootebook用の青いバッグ、nootebook、nootebook apple。たとえば、「notebook」と入力すると、「nootebook、nootebook apple」が上位の結果に表示されます。しかし、私はトップの結果にバッグを持っています! 私は何を間違っていますか?検索フィールドの開始からの最大クローズポジションの結果を得るために何をする必要がありますか? 可能です?