SetFilter("forum_id",array(1,3,7)); //Bereichsfilterung//Beim Filtern nach Veröffentlichung"/> SetFilter("forum_id",array(1,3,7)); //Bereichsfilterung//Beim Filtern nach Veröffentlichung">

Heim  >  Artikel  >  Backend-Entwicklung  >  Einfaches Beispiel für PHP Sphinx

Einfaches Beispiel für PHP Sphinx

墨辰丷
墨辰丷Original
2018-05-15 17:10:192616Durchsuche

Lassen Sie mich Ihnen ein einfaches Beispiel für PHP-Sphinx vorstellen. Freunde in Not können sich darauf beziehen.

Der Code lautet wie folgt:

<?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(&#39;item_id&#39;,SPH_GROUP_ATTR,&#39;s_order desc&#39;);
$sp->SetFilter(&#39;city_id&#39;,&#39;1&#39;);
$sp->SetFilter(&#39;cat_id&#39;,array(1));
$sp->SetLimit(0,10,1000);
$sp->AddQuery(&#39;电影票&#39;,&#39;index&#39;);
$sp->ResetFilters();//重置筛选条件
$sp->ResetGroupBy();//重置分组
 
$sp->SetGroupBy(&#39;item_id&#39;, SPH_GROUPBY_ATTR, &#39;s_order desc&#39;);
$sp->setFilter(&#39;city_id&#39;, &#39;2&#39;);
$sp->setFilter(&#39;cat_id&#39;, array(2));
$sp->setLimits(0, 20, 1000);
$sp->AddQuery(&#39;温泉&#39;, &#39;index&#39;);
$sp->ResetFilters();// 重置筛选条件
$sp->ResetGroupBy();//重置分组
$results = $sp->RunQuries();
//by http://www.jbxue.com
?>

Batch-Abfragen (oder Mehrfachabfragen) ermöglichen es searchd, mögliche interne Optimierungen durchzuführen und Netzwerkverbindungen und -prozesse auf jeden Fall zu reduzieren Overhead. Im Vergleich zu Einzelabfragen verursachen Stapelabfragen keinen zusätzlichen Overhead. Wenn Ihre Webseite also mehrere unterschiedliche Abfragen ausführt, sollten Sie unbedingt die Verwendung von Stapelabfragen in Betracht ziehen.

Wenn Sie beispielsweise dieselbe Volltextabfrage mehrmals ausführen, aber unterschiedliche Sortier- oder Gruppierungseinstellungen verwenden, führt searchd dazu, dass die teure Volltextsuche und Relevanzberechnung nur einmal ausgeführt wird und dann mehrere Gruppenergebnisse generiert werden.

Manchmal ist es notwendig, nicht nur die Suchergebnisse anzuzeigen, sondern auch einige kategoriebezogene Zählinformationen anzuzeigen, z. B. die Anzahl der nach Hersteller gruppierten Produkte. In diesem Fall wird eine Batch-Abfrage viel gespart von Overhead. Ohne Batch-Abfragen müssten Sie diese im Wesentlichen identischen Abfragen mehrmals ausführen und dieselben Übereinstimmungen abrufen, was zu unterschiedlichen Ergebnissätzen führen würde. Wenn Sie Batch-Abfragen verwenden, kombinieren Sie diese Abfragen einfach zu einer Batch-Abfrage und Sphinx optimiert diese redundanten Volltextsuchen intern.

AddQuery() speichert intern alle aktuellen Einstellungsstatus und Abfragen, und Sie können Einstellungen auch in nachfolgenden AddQuery()-Aufrufen ändern. Zuvor hinzugefügte Abfragen sind davon nicht betroffen, es gibt eigentlich keine Möglichkeit, sie zu ändern.

Mit dem obigen Code fragt die erste Abfrage „Hallo Welt“ im Index „Dokumente“ ab und sortiert die Ergebnisse nach Relevanz. Die zweite Abfrage fragt „ipod“ im Index „Produkte“ ab und sortiert Die Ergebnisse werden nach Preis sortiert, eine dritte Abfrage sucht im Index „Bücher“ nach „Harry Potter“ und die Ergebnisse sind weiterhin nach Preis sortiert. Beachten Sie, dass der zweite SetSortMode()-Aufruf keine Auswirkungen auf die erste Abfrage hat (da diese bereits hinzugefügt wurde), die nächsten beiden Abfragen jedoch schon.

Darüber hinaus wird jede vor AddQuery() festgelegte Filterung weiterhin von nachfolgenden Abfragen verwendet. Wenn Sie also SetFilter() vor der ersten Abfrage verwenden, wird auf die zweite Abfrage, die über AddQuery() (und nachfolgende Batch-Abfragen) ausgeführt wird, dieselbe Filterung angewendet, es sei denn, Sie rufen zuerst ResetFilters() auf, um die Filterregeln zu löschen. Gleichzeitig können Sie auch jederzeit neue Filterregeln hinzufügen.

AddQuery() ändert den aktuellen Status nicht. Das heißt, alle vorhandenen Sortier-, Filter- und Gruppierungseinstellungen werden durch diesen Aufruf nicht geändert, sodass nachfolgende Abfragen vorhandene Einstellungen problemlos wiederverwenden können.

AddQuery() gibt einen Index in dem Array zurück, das vom RunQueries()-Ergebnis zurückgegeben wird. Es handelt sich um eine aufsteigende Ganzzahl beginnend bei 0, d. h. der erste Aufruf gibt 0 zurück, der zweite 1 und so weiter. Diese praktische Funktion erspart Ihnen die manuelle Erfassung der Indizes bei Bedarf.

Verwandte Empfehlungen:

Yii2.0 mit Sphinx in PHP

So verwenden Sie die Sphinx-Suchmaschine in PHP

Detaillierte Beispiele für die PHP+Sphinx+Mysql-Entwicklung einer Suchmaschine

Das obige ist der detaillierte Inhalt vonEinfaches Beispiel für PHP Sphinx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn