sphinx php api使用講解

2021-06-27 18:05:06 字數 3178 閱讀 2496

sphinx是乙個基於sql的全文檢索引擎,可以結合mysql,postgresql做全文搜尋,它可以提供比資料庫本身更專業的搜尋功能,使得應用程式更容易實現專業化的全文檢索。sphinx特別為一些指令碼語言設計搜尋api介面,如php,python,perl,ruby等,同時為mysql也設計了乙個儲存引擎外掛程式。

<?php

//引數篩選

//篩選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, 將查詢看作乙個布林表示式 (參見 第 5.2 節 「布林查詢語法」);

sph_match_extended, 將查詢看作乙個coreseek/sphinx內部查詢語言的表示式 (參見 第 5.3 節 「擴充套件查詢語法」). 從版本coreseek 3/sphinx 0.9.9開始, 這個選項被選項sph_match_extended2代替,它提供了更多功能和更佳的效能。保留這個選項是為了與遺留的舊**相容——這樣即使 sphinx及其元件包括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();

批量查詢(或多查詢)使searchd能夠進行可能的內部優化,並且無論在任何情況下都會減少網路連線和程序建立方面的開銷。相對於單獨的查詢,批量查詢不會引入任何額外的開銷。因此當您的web頁執行幾個不同的查詢時,一定要考慮使用批量查詢。

例如,多次執行同乙個全文查詢,但使用不同的排序或分組設定,這會使searchd僅執行一次開銷昂貴的全文檢索和相關度計算,然後在此基礎上產生多個分組結果。

有時您不僅需要簡單地顯示搜尋結果,而且要顯示一些與類別相關的計數資訊,例如按製造商分組後的產品數目,此時批量查詢會節約大量的開銷。 若無批量查詢,您會必須將這些本質上幾乎相同的查詢執行多次並取回相同的匹配項,最後產生不同的結果集。若使用批量查詢,您只須將這些查詢簡單地組成乙個 批量查詢,sphinx會在內部優化掉這些冗餘的全文搜尋。

addquery()在內部儲存全部當前設定狀態以及查詢,您也可在後續的addquery()呼叫中改變設定。早先加入的查詢不會被影響,實際上沒有任何辦法可以改變它們。

用上述**,第乙個查詢會在「documents」索引上查詢「hello world」並將結果按相關度排序,第二個查詢會在「products」索引上查詢「ipod」並將結果按**排序,第三個查詢在「books」索引上搜 索「harry potter」,結果仍按**排序。注意,第二個setsortmode()呼叫並不會影響第乙個查詢(因為它已經被新增了),但後面的兩個查詢都會受影 響。

此外,在addquery()之前設定的任何過濾,都會被後續查詢繼續使用。因此,如果在第乙個查詢前使用setfilter(),則通過 addquery()執行的第二個查詢(以及隨後的批量查詢)都會應用同樣的過濾,除非你先呼叫resetfilters()來清除過濾規則。同時,你還 可以隨時加入新的過濾規則

addquery()並不修改當前狀態。也就是說,已有的全部排序、過濾和分組設定都不會因這個呼叫而發生改變,因此後續的查詢很容易地復用現有設定。

addquery()返回runqueries()結果返回的陣列中的乙個下標。它是乙個從0開始的遞增整數,即,第一次呼叫返回0,第二次返回1,以此類推。這個方便的特性使你在需要這些下標的時候不用手工記錄它們。

Jquery 中 ajaxSubmit使用講解

使用jquery中的ajaxsubmit方法,需引用jquery.form.js此js檔案 使用 例 注意 testform 引號中名稱必須要和form元素id值要保持一致 ajaxsubmit 和ajaxform區別 ajaxform不能提交表單。在document的ready函式中,使用ajax...

CSS的animation屬性使用例項講解

一 animation的語法 1 keyframes 插入關鍵幀 1 formto形式 css code複製內容到剪貼簿 2 百分比的形式 css code複製內容到剪貼簿 2 animation name 定義動畫的名稱 animation name none 動畫的名稱 1 動畫的名稱是由key...

講一講IP位址

ip位址組成ip位址分類 為了適應不同的網路,ip位址空間被分為5類,分別是a,b,c,d和e類,其中a,b,c類最常用,d類用於組播,e類用於科研。從上述 中可以看到,每個網路中的主機數都是2 主機位 2,那是因為網路中有一些位址被保留,不能分配給網路使用,有哪些保留位址呢?其實主要有兩類,一類叫...