Laissez-moi vous présenter un exemple simple de php sphinx. Les amis dans le besoin peuvent s'y référer.
Le code est le suivant :
<?php //sphinx简单例子 //参数筛选 //筛选cat_id=2 $cl->SetFilter("cat_id",array(2)); //仅在id为1、3、7的子论坛中搜索 $cl->SetFilter("forum_id",array(1,3,7)); //范围筛选 //筛选发布时间为今天,参数为int时间戳 $cl->SetFilterRange("starttime",123,124); //筛选价格 $cl->SetFilterRange("price",10.0,99.9); // 分组 //按照item_id分组,并且按照order desc排序 $cl->SetGroupBy("item_id",SPH_GROUP_ATTR,"order desc"); //排序模式 //按照price desc排序 $cl->SetSortMode(SPH_SORT_ATTR_DESC,"price"); 注意:会被SetGroupBy中的排序覆盖 // 匹配查询词中的任意一个 $cl->SetMatchMode ( SPH_MATCH_ANY ); SPH_MATCH_ALL, 匹配所有查询词(默认模式); SPH_MATCH_ANY, 匹配查询词中的任意一个; SPH_MATCH_PHRASE, 将整个查询看作一个词组,要求按顺序完整匹配; SPH_MATCH_BOOLEAN, 将查询看NDED, 将查询看作一个CoreSeek/Sphinx内部查询语言的表达式 (参见 第 5.3 节 “扩展查询语法”). 从版本Coreseek 3/Sphinx 0.9.9开始, 这个选项被选项SPH_MATCH_EXTENDED2代替,它提供了更多功能和更佳的性能。 保留这个选项是为了与遗留的旧代码兼容——这样即使 S作一个布尔表达式 (参见 第 5.2 节 “布尔查询语法”);
SPH_MATCH_EXTEphinx及其组件包括API升级的时候,旧的应用程序代码还能够继续工作。 SPH_MATCH_EXTENDED2, 使用第二版的“扩展匹配模式”对查询进行匹配. SPH_MATCH_FULLSCAN, 强制使用下文所述的“完整扫描”模式来对查询进行匹配。 注意,在此模式下,所有的查询词都被忽略,尽管过滤器、过滤器范围以及分组仍然起作用, 但任何文本匹配都不会发生. //从0开始查询,查询30条,返回结果最多为1000 $cl->setLimits(0,30,1000); // 从名称为index的sphinx索引查询“电影票” $cl->Query("电影票","index"); // 从名称为index的sphinx索引查询“电影票” $sp->SetGroupBy('item_id',SPH_GROUP_ATTR,'s_order desc'); $sp->SetFilter('city_id','1'); $sp->SetFilter('cat_id',array(1)); $sp->SetLimit(0,10,1000); $sp->AddQuery('电影票','index'); $sp->ResetFilters();//重置筛选条件 $sp->ResetGroupBy();//重置分组 $sp->SetGroupBy('item_id', SPH_GROUPBY_ATTR, 's_order desc'); $sp->setFilter('city_id', '2'); $sp->setFilter('cat_id', array(2)); $sp->setLimits(0, 20, 1000); $sp->AddQuery('温泉', 'index'); $sp->ResetFilters();// 重置筛选条件 $sp->ResetGroupBy();//重置分组 $results = $sp->RunQuries(); //by http://www.jbxue.com ?>
Les requêtes batch (ou multi-requêtes) permettent à searchd d'effectuer d'éventuelles optimisations internes et réduiront les frais généraux dans connexions réseau et création de processus. Par rapport aux requêtes individuelles, les requêtes par lots n’introduisent aucune surcharge supplémentaire. Ainsi, lorsque votre page Web exécute plusieurs requêtes différentes, pensez à utiliser des requêtes par lots.
Par exemple, exécuter la même requête en texte intégral plusieurs fois mais en utilisant des paramètres de tri ou de regroupement différents fera que searchd n'exécutera qu'une seule fois la recherche en texte intégral coûteuse et le calcul de pertinence, puis générera plusieurs résultats de groupe.
Parfois, il est nécessaire non seulement d'afficher simplement les résultats de la recherche, mais également d'afficher certaines informations de comptage liées à la catégorie, comme le nombre de produits regroupés par fabricant. Dans ce cas, l'interrogation par lots permettra d'économiser beaucoup. des frais généraux. Sans requêtes par lots, vous devrez exécuter plusieurs fois ces requêtes essentiellement identiques et récupérer les mêmes correspondances, ce qui entraînerait des ensembles de résultats différents. Si vous utilisez des requêtes par lots, vous combinez simplement ces requêtes en une requête par lots, et Sphinx optimisera ces recherches en texte intégral redondantes en interne.
AddQuery() stocke en interne tous les statuts et requêtes de paramètres actuels, et vous pouvez également modifier les paramètres lors des appels AddQuery() ultérieurs. Les requêtes ajoutées précédemment ne seront pas affectées, il n'y a vraiment aucun moyen de les modifier.
En utilisant le code ci-dessus, la première requête interrogera "hello world" sur l'index "documents" et triera les résultats par pertinence. La deuxième requête interrogera "ipod" sur l'index "produits" et triera les résultats. résultats par prix, la troisième requête recherche "harry potter" sur l'index "livres", et les résultats sont toujours triés par prix. Notez que le deuxième appel à SetSortMode() n’affecte pas la première requête (car elle a déjà été ajoutée), mais les deux requêtes suivantes le feront.
De plus, tout filtrage défini avant AddQuery() continuera à être utilisé par les requêtes suivantes. Par conséquent, si vous utilisez SetFilter() avant la première requête, le même filtrage sera appliqué à la deuxième requête exécutée via AddQuery() (et aux requêtes par lots suivantes), sauf si vous appelez d'abord ResetFilters() pour effacer les règles de filtrage. Parallèlement, vous pouvez ajouter de nouvelles règles de filtrage à tout moment.
AddQuery() ne modifie pas l'état actuel. Autrement dit, tous les paramètres de tri, de filtrage et de regroupement existants ne seront pas modifiés par cet appel, de sorte que les requêtes ultérieures pourront facilement réutiliser les paramètres existants.
AddQuery() renvoie un index dans le tableau renvoyé par le résultat RunQueries(). Il s'agit d'un entier incrémentiel commençant à 0, c'est-à-dire que le premier appel renvoie 0, le second renvoie 1, et ainsi de suite. Cette fonctionnalité pratique vous évite d'avoir à enregistrer les indices manuellement lorsque vous en avez besoin.
Recommandations associées :
Yii2.0 utilisant Sphinx en PHP
Comment utiliser le moteur de recherche sphinx en php
Exemples détaillés de développement PHP+Sphinx+Mysql du moteur de recherche
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!