PHP redis實現超迷你全文檢索

2021-09-08 10:30:28 字數 1518 閱讀 5807

2023年10月31日 11:45:39

情景: 我們平台有好多遊戲, 運營的同事在查詢某一款遊戲的時候, 目前使用的是html的select下拉列表的展現形式, 運營的同事得乙個個去找,然後選中,耗時又費眼

效果: 輸入"三國"或者"國三", 將自動列出所有包含"三國"的遊戲名字, 輸入不限順序; 例如輸入"殺三國",仍然會將"三國殺"這款遊戲找出來

實現: 我用redis的集合+php的array_intersect()和mb系列函式, 實現了乙個超迷你的全文檢索功能

原理: (大道不過兩三言,說穿不值一文錢,哈哈)

1, 將所有的遊戲名字讀出來,拆分成單個漢字

2, 將這些漢字作為redis集合的鍵,寫入redis,每個集合裡的值是所有那些遊戲名字中包含此漢字的遊戲的id

3, 當使用者輸入文字的時候通過ajax非同步請求,將使用者輸入傳給php

4, 將輸入的文字拆分成單個漢字, 分別找到這些漢字在redis中的集合值

5, 取出來,求交集,就找到了同時包含這幾個漢字的遊戲的id

6, 最後到資料庫裡查出來相應的遊戲資訊即可

缺點: 刪除資料不方便

php寫入redis和檢索的**:

1

//自動補全

2//不限輸入漢字的前後順序: 輸入"國三殺" => 輸出 "三國殺"

3function

getautocomplate()410

$intwordlength = mb_strlen($word, 'utf-8');

1112

$this->load->library('iredis');

13if (1 == $intwordlength

) else22}

2324

$arrgame = $this->gamemodel->getgamenameforautocomplate($arrgid

);25

//var_dump($arrgame);exit;

26$jsongame = json_encode($arrgame

);27

exit($jsongame

);28}29

30//

自動補全, 建立索引

31function

setautocomplate()

3241}42

43$this->load->library('iredis');

44foreach ($arrindex

as$word => $arrgid

) 48}49

50 }

操作redis的方法

1

//自動補全功能

2public

function setautocomplate($key, $value)3

78//自動補全功能

9public

function getautocomplate($key)10

finger php 框架

PHP redis實現超迷你全文檢索

情景 我們平台有好多遊戲,運營的同事在查詢某一款遊戲的時候,目前使用的是html的select下拉列表的展現形式,運營的同事得乙個個去找,然後選中,耗時又費眼 效果 輸入 三國 或者程式設計客棧 國三 將自動列出所有包含 三國 的遊戲名字,輸入不限順序 例如輸入 殺三國 仍然會將 三國殺 這款遊戲找...

php redis實現訊息佇列

參考 參考 訊息佇列 是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞 如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它 應用場景 非同步處理,應用解耦,流量削鋒和訊息通訊四個場景 1 非同步處...

php redis實現延遲佇列

基於redis有序集實現延遲任務執行,比如某個時間給某個使用者發簡訊,訂單過期處理,等等 我是在tp5框架上寫的,實現起來很簡單,對於一些不是很複雜的應用足夠了,目前在公司專案中使用,後台程序並沒有實現多程序,不多說,貼 不回排版,見諒 1 命令列指令碼 執行方法 php think delay q...