Przeglądaj źródła

加入cache支持

visuddhinanda 3 lat temu
rodzic
commit
3d103e4e5e
1 zmienionych plików z 72 dodań i 20 usunięć
  1. 72 20
      app/Http/Controllers/WbwLookupController.php

+ 72 - 20
app/Http/Controllers/WbwLookupController.php

@@ -4,9 +4,26 @@ namespace App\Http\Controllers;
 
 use App\Models\UserDict;
 use Illuminate\Http\Request;
+use App\Tools\CaseMan;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Cache;
+
+
 
 class WbwLookupController extends Controller
 {
+	private $dictList = [
+		'57afac99-0887-455c-b18e-67c8682158b0',// system regular
+		'4d3a0d92-0adc-4052-80f5-512a2603d0e8',// system irregular
+		'8359757e-9575-455b-a772-cc6f036caea0',// system sandhi
+		'c42980f0-5967-4833-b695-84183344f68f',// robot compound
+		'61f23efb-b526-4a8e-999e-076965034e60',// pali myanmar grammar
+		'eae9fd6f-7bac-4940-b80d-ad6cd6f433bf',// Concise P-E Dict
+		'2f93d0fe-3d68-46ee-a80b-11fa445a29c6',// unity
+		'beb45062-7c20-4047-bcd4-1f636ba443d1',// U Hau Sein
+		'8833de18-0978-434c-b281-a2e7387f69be',// 巴汉增订
+		'3acf0c0f-59a7-4d25-a3d9-bf394a266ebd',// 汉译パーリ语辞典-黃秉榮
+	];
     /**
      * Display a listing of the resource.
      * @param  \Illuminate\Http\Request  $request
@@ -16,40 +33,75 @@ class WbwLookupController extends Controller
     public function index(Request $request)
     {
         //
+		$startAt = microtime(true);
+		$caseman = new CaseMan();
 		$output  = array();
 		$wordPool = array();
 		$input = \explode(',',$request->get("words")); 
 		foreach ($input as $word) {
-			# 0 未处理 1 已处理
-			$wordPool[$word] = 0; 
+			$wordPool[$word] = ['base' => false,'done' => false,'apply' => false]; 
 		}
-		for ($i=0; $i < 3; $i++) { 
+		Log::info("query start ".$request->get("words"));
+
+		for ($i=0; $i < 2; $i++) { 
 			# code...
-			foreach ($wordPool as $word => $status) {
+			foreach ($wordPool as $word => $info) {
 				# code...
-				$wordPool[$word] = 1;
-				$result = UserDict::where('word',$word)->orderBy('confidence','desc')->get();
-				if(count($result)>0){
-					array_push($output,$result);
-				}else{
-					//没查到
-					if($i == 1){
-						//去尾查
+				if($info['done'] == false){
+					$wordPool[$word]['done'] = true;
+					foreach ($this->dictList as  $dictId) {
+						# code...
 					}
-				}
-				foreach ($result as $word2) {
-					# 将拆分放入池中
-					if(!empty($word2->factors)){
-						$factors = \explode('+',$word2->factors);
-						foreach ($factors as $factor) {
+					$result = Cache::remember("dict/".$word,60,function() use($word){
+						return UserDict::where('word',$word)->orderBy('confidence','desc')->get();
+					});
+					Log::info("query {$word} ".((microtime(true)-$startAt)*1000)."s.");
+					if(count($result)>0){
+						foreach ($result as  $dictword) {
 							# code...
-							if(!isset($wordPool[$factor])){
-								$wordPool[$factor] = 0;
+							array_push($output,$dictword);
+							if(!empty($dictword->factors)){
+								if(!isset($wordPool[$word]['factors'])){
+									//将第一个拆分作为最佳拆分存储
+									$wordPool[$word]['factors'] = $dictword->factors;
+								}
+							}
+						}
+					}else{
+						//没查到 去尾查
+						Log::info("没查到 去尾查");
+						$newBase = array();
+						$parents = $caseman->WordToBase($word);
+						foreach ($parents as $base => $rows) {
+							# 只保存语法信息合理的数据
+							if(count($rows)>0){
+								Log::info("found:{$value['type']}-{$value['grammar']}-{$value['parent']}");
+								array_push($output,$rows);
 							}
 						}
+						Log::info("去尾查结束");
 					}
 				}
 			}
+
+			//查询结果中的拆分信息
+			$newWordPart = array();
+			foreach ($wordPool as $word => $info) {
+				if(!empty($info['factors'])){
+					$factors = \explode('+',$info['factors']);
+					foreach ($factors as $factor) {
+						# 将没有的拆分放入单词查询列表
+						if(!isset($wordPool[$factor])){
+							$newWordPart[$factor] = 0;
+						}
+					}
+				}				
+			}
+			foreach ($newWordPart as $part => $value) {
+				# 将拆分放入池中
+				$wordPool[$part] = ['base' => false,'done' => false,'apply' => false]; 
+			}
+			Log::info("loop {$i} ".((microtime(true)-$startAt)*1000)."s.");
 		}
 
 		return $this->ok(["rows"=>$output]);