Przeglądaj źródła

查字典自动补全使用redis

visuddhinanda 5 lat temu
rodzic
commit
cfd8cfdcfd
2 zmienionych plików z 86 dodań i 5 usunięć
  1. 20 5
      app/dict/dict_lookup_pre.php
  2. 66 0
      app/dict/function.php

+ 20 - 5
app/dict/dict_lookup_pre.php

@@ -3,6 +3,7 @@
 require_once '../path.php';
 require_once '../public/_pdo.php';
 require_once '../redis/function.php';
+require_once '../dict/function.php';
 
 if (isset($_GET["language"])) {
     $currLanguage = $_GET["language"];
@@ -15,19 +16,32 @@ if (isset($_GET["language"])) {
 }
 $currLanguage = explode("-", $currLanguage)[0];
 
-if (isset($_GET["word"])) {
+if (isset($_GET["word"]) && !empty($_GET["word"])) {
     $word = $_GET["word"];
 } else {
     echo json_encode(array(), JSON_UNESCAPED_UNICODE);
     exit;
 }
-/*
+
 $redis = redis_connect();
 if($redis!==false){
-	$redis->hexist()
+	$arrWordIdx = $redis->hget("ref_dict_idx",$word);
+	if($arrWordIdx===FALSE){
+		PDO_Connect(_FILE_DB_REF_INDEX_);
+		$query = "SELECT word,count from " . _TABLE_REF_INDEX_ . " where eword like ?  OR word like ?  limit 0,15";
+		$Fetch = PDO_FetchAll($query, array($word . '%', $word . '%'));
+		$arrWordIdx=json_encode($Fetch, JSON_UNESCAPED_UNICODE);
+		$redis->hset("ref_dict_idx",$word,$arrWordIdx);
+	}
+	$arrResult = json_decode($arrWordIdx,true);
+	foreach ($arrResult as $key => $value) {
+		# code...
+		$arrResult[$key]["mean"]=getRefFirstMeaning($arrResult[$key]["word"],$currLanguage,$redis);
+	}
+	echo json_encode($arrResult, JSON_UNESCAPED_UNICODE);
+	exit;	
 }
 else
-*/
 {
 	PDO_Connect(_FILE_DB_REF_INDEX_);
 	$query = "SELECT word,count from " . _TABLE_REF_INDEX_ . " where eword like ?  OR word like ?  limit 0,15";
@@ -53,6 +67,7 @@ else
 			}
 		}
 	}
+	echo json_encode($Fetch, JSON_UNESCAPED_UNICODE);
 }
 
-echo json_encode($Fetch, JSON_UNESCAPED_UNICODE);
+

+ 66 - 0
app/dict/function.php

@@ -0,0 +1,66 @@
+<?php
+require_once '../path.php';
+require_once '../public/_pdo.php';
+require_once '../redis/function.php';
+
+function getRefFirstMeaning($word,$lang,$redis){
+	if($redis!==false){
+		$len = $redis->hLen("ref_first_mean_".$word);
+		if($len===FALSE || $len==0){
+			PDO_Connect(_FILE_DB_REF_, _DB_USERNAME_, _DB_PASSWORD_);
+			$query = "SELECT mean,language as lang from " . _TABLE_DICT_REF_ . " where word = ?  group by language";
+			$Fetch = PDO_FetchAll($query, array($word));
+			foreach ($Fetch as $key => $value) {
+				# code...
+				$redis->hset("ref_first_mean_".$word,$value["lang"],$value["mean"]);
+			}
+		}
+		$mean = $redis->hGet("ref_first_mean_".$word,$lang);
+		if($mean!=FALSE){
+			return $mean;
+		}
+		else{
+			if($lang!="en"){
+				$mean = $redis->hGet("ref_first_mean_".$word,"en");
+				if($mean!=FALSE){
+					return $mean;
+				}
+			}
+
+			$arr_keys = $redis->hGetAll("ref_first_mean_".$word);
+			if(count($arr_keys)>0){
+				foreach ($arr_keys as $key => $value) {
+					# code...
+					return $value;
+				}
+			}
+			else{
+				return "";
+			}
+
+		}
+		
+	}
+	else{
+		PDO_Connect(_FILE_DB_REF_, _DB_USERNAME_, _DB_PASSWORD_);
+		$query = "SELECT mean from " . _TABLE_DICT_REF_ . " where word = ? and language = ?  limit 0,1";
+		# code...
+		$mean = PDO_FetchRow($query, array($word, $lang));
+		if ($mean) {
+			return $mean["mean"];
+		} else {
+			if ($lang != "en") {
+				$mean = PDO_FetchRow($query, array($word, "en"));
+				if ($mean) {
+					return $mean["mean"];
+				} else {
+					return "";
+				}
+			} else {
+				return "";
+			}
+		}
+				
+	}
+
+}