Zend_Search_Luncene handle Querys - PullRequest
       11

Zend_Search_Luncene handle Querys

0 голосов
/ 19 августа 2009

Я пытаюсь внедрить Searchmachine в мой сайт. Для этого я использую Zend_Search_Lucene.

Индекс создается так:

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);

    }

Но когда я пытаюсь запросить индекс с помощью:

$ index-> ​​find ('Wordpress 2.8.1'. '*');

я получаю следующую ошибку:

"в начале шаблона требуются не подстановочные знаки."

есть идеи, как запросить строку вроде моей? запрос для «wordpress» работает как исключение.

1 Ответ

1 голос
/ 19 августа 2009

Lucene не может обрабатывать ведущие символы подстановки, только конечные. То есть он не поддерживает запросы типа «расскажи мне всем, чье имя оканчивается на« att »», что будет выглядеть примерно так:

first_name: * att

Поддерживаются только подстановочные символы. Скажите мне всем, чьи имена конец , которые начинаются с 'ма'

first_name: ma *

См. Эту запись часто задаваемых вопросов Lucene:

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

Есть обходной путь для Lucene 2.1, но разработчики говорят, что он может быть "дорогим".

...