亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2873 | 回復: 4
打印 上一主題 下一主題

如何實現(xiàn)類似google的多關鍵詞查詢(多關鍵詞用空格或其它符號間隔),并求最高效率 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2006-02-21 17:05 |只看該作者 |倒序瀏覽
如何實現(xiàn)類似google的多關鍵詞查詢,要求查詢效率最高
當空格或+號時是 and 運算
當-號時是 非 運算
當|號時是 or 運算

分解關鍵詞后,用哪種運算方式效率最高呢?
1. 用N個like 條件
2. 用in(a,b,c)
3. 用全文檢索技術
4. 用正則表達式

===================================
假如有一個表
CREATE TABLE `article` (
        `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
        `title` VARCHAR( 255 ) NOT NULL ,
        `descript` TEXT NOT NULL ,
        `content` LONGTEXT NOT NULL ,
        PRIMARY KEY ( `id` ) ,
        INDEX ( `title` ) ,
        FULLTEXT (`title` ,`descript` ,`content`)
);

目的:
要查詢 key_a,key_b,key_c 在 title,descript,content(這三個字段視為一個整體) 中同時存在或排除某關鍵詞

如 客戶端輸入"key_a key_b key_c"(情況一)或 "key_a key_b -key_c"(情況二)
我們針對這兩種情況該如何寫SQL語句呢?

===================================


集思廣益,請大家給出具體的程序段及函數(shù),謝謝。

論壇徽章:
0
2 [報告]
發(fā)表于 2006-02-21 22:44 |只看該作者

  1. <?php
  2. /**
  3. * $kw 用戶輸入的關鍵詞組合 i.e: 'php 操作 - 手冊'
  4. * 運行該代碼片段之后將生成 $and , $or , $except 三個數(shù)組存放相應關鍵詞
  5. *
  6. * 說明這個實現(xiàn)辦法主要是依靠字符串分析,
  7. * 也無考慮個別GBK碼的低位剛好是 '|+-' 的情況, 可以嘗試用正則來處理
  8. */

  9. $kw = strtolower($kw);
  10. $kw = preg_replace("/\s+/s", " ", $kw);
  11. $rep = array(" and " => "+", " or " => "|", " + " => "+", " | " => "|", " - " => "-", " " => "+");
  12. $kw = strtr($kw, $rep);

  13. $and = array();
  14. $or = array();
  15. $except = array();

  16. $len = strlen($kw);
  17. $tmp = "";
  18. $var = "and";

  19. for ($i = 0; $i < $len; $i++) {
  20.     if ($kw[$i] == '+') {
  21.         if (!empty($tmp))
  22.             array_push(${$var}, $tmp);
  23.         $var = "and";
  24.         $tmp = "";
  25.     }
  26.     else if ($kw[$i] == '-') {
  27.         if (!empty($tmp))
  28.             array_push(${$var}, $tmp);
  29.         $var = "except";
  30.         $tmp = "";
  31.     }
  32.     else if ($kw[$i] == '|') {
  33.         if (!empty($tmp))
  34.             array_push(${$var}, $tmp);
  35.         $var = "or";
  36.         $tmp = "";
  37.     }
  38.     else
  39.         $tmp .= $kw[$i];
  40. }

  41. if (!empty($tmp)) array_push(${$var}, $tmp);

  42. // 處理完成得到 $and, $or, $except 三個數(shù)組
  43. print_r($and);
  44. print_r($or);
  45. print_r($except);
  46. ?>
復制代碼

論壇徽章:
0
3 [報告]
發(fā)表于 2006-02-21 23:18 |只看該作者
謝謝hightman兄,但還有一個重要的問題沒有實現(xiàn)。

用php得出keyword數(shù)組后,運用哪種mysql查詢方式才是最高效率的呢?

論壇徽章:
0
4 [報告]
發(fā)表于 2006-02-22 11:48 |只看該作者
如果用 LIKE 來匹配的話效率肯定不高甚至很差, 全部遍歷...

可以試試 MYSQL 自帶的 FULLTEXT 索引.  具體用法參看手冊吧

論壇徽章:
62
2016科比退役紀念章
日期:2016-06-28 17:45:06奧蘭多魔術
日期:2015-05-04 22:47:40菠菜神燈
日期:2015-05-04 22:35:07菠菜神燈
日期:2015-05-04 22:35:02NBA季后賽大富翁
日期:2015-05-04 22:33:34NBA常規(guī)賽紀念章
日期:2015-05-04 22:32:032015年亞洲杯紀念徽章
日期:2015-04-14 16:54:452015年亞洲杯之朝鮮
日期:2015-03-19 23:03:16明尼蘇達森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辭舊歲徽章
日期:2015-03-03 16:54:15
5 [報告]
發(fā)表于 2006-02-22 11:50 |只看該作者
使用FULLTEXT,最好用utf8字符集
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP