JayPS

 |  Information, full profile

Write to JayPS

Your message
Tags
Type
or Cancel
 
To
    ou Annuler
JayPS Search, a fulltext search engine based on behaviours
By JayPS , 25 November 2013
To

Hello,

Months ago, I've started to write a search engine for Novius OS to easily index and query any models in your project.

After several beta versions, I've recently published a version 1.0. I'm now using it daily on many production websites, with several thousands of indexed objects.

License: MIT

Source code: https://github.com/jay3/jayps_search
Examples: https://github.com/jay3/jayps_search_test

Everything works with a behaviour. All you have to do is to add it to the models you want to query.
When you save your objects, keywords are extracted from specified fields and saved in the database.
You can later query them using the find() method of the orm, and mix keywords search with others.


Usage:

To use the search with find(), simply provide an array of keywords. '*' acts as a joker at the end.

$pages = NosPageModel_Page::find('all', array(
    'where' => array(
        array('keywords', 'chimpa* monkey'),
        'page_published' => 1,
        'page_context'   => NosNos::main_controller()->getPage()->page_context,
    ),
    'rows_limit' => 10,
    'order_by' => array('jayps_search_score', 'page_title'),
));


Configuration:


You can add the behaviour directly in your model file, or in your bootstrap.php using events. Your can possibility add an "indexation date" field in your database.

Event::register_function('config|jayps_search::config', function(&$config) {
    $config['observed_models']['noviusos_page::model/page'] = array(
        'primary_key' => 'page_id',
        'config_behaviour' => array(
            'fields' => array('page_title', 'wysiwygs->content'),
        ),
    );
    $config['observed_models']['myapp::model/mymodel'] = array(
        'primary_key' => 'mode_id',
        'config_behaviour' => array(
            'fields' => array('mode_title', 'mode_description'),
            'field_date_indexation' => 'mode_date_indexation'
        ),
    );
});

JayPSSearchOrm_Behaviour_Searchable::init();
Event::register_function('front.start', function() {
    // init all relations
    JayPSSearchOrm_Behaviour_Searchable::init_relations();
});


Index objects:


Object are automatically reindex when you save them (save() triggers the interval __index() method of the behaviour)
$myobject->save();

Your can reindex objects. Example:
    $pages = NosPageModel_Page::find('all', array(
        'limit' => 50,
    ));
    foreach ($pages as $page) {
        $page->force_reindex();
    }


I hope it can help you

Jay

2 users liked this article.
 
 
To
    ou Annuler
Unicité des templates par application
By JayPS , 27 November 2012
To

Bonjour,

J'ai l'impression que l'unicité d'un template dans un site se fait uniquement sur la clé founie par le template dans le metadata.config.php de l'application, indépendement du namespace de l'application. Du coup, 2 applications différentes ne peuvent pas fournir le même template. C'est assez génant pour des noms génériques (top_menu, classic...). Dans ce cas, l'ajout d'une nouvelle application est bloquée à l'installation.

Est-ce que l'unicité pourrait se faire par exemple sur 'Namespace de l'application' + 'clé fournie par le tempalte' ?

Merci

JayPS

 
 
To
    ou Annuler
Preview par défaut pour les enhancers
By JayPS , 27 November 2012
To

Bonjour,

Je trouve le concept de preview des enhancers très séduisants, en particulier quand on intègre un aperçu "taille réelle" dans le wysiwyg.

Mais à ma connaissance, il n'existe pas de moyen "rapide" de créer un enhancer sans définir une preview (donc au moins un un controleur et une vue). Est-il envisageable d'avoir une preview "par défaut", qui générerait par exemple automatiquement la preview à partir d'un titre et d'une image fournis dans la config de l'enhancer?

Merci

JayPS