Board logo

主題: [其他] [問題]關鍵字搜尋的程式開發 [打印本頁]

發表人: ROACH    時間: 2014-1-28 10:24 AM     主題: [問題]關鍵字搜尋的程式開發

問一下像Google或Yahoo的搜尋引擎的關鍵字預載
比方搜尋的時候下面會跑出最接近的搜尋結果

嗯~看來大家只要Twed2k掛掉都會去Google搜尋



這個要怎做呢??下面的框框用jquery寫的對吧
有範例嗎?
那打一個字的時候就去資料庫撈一次嗎?
還是打第一個字的時候就先把符合的關鍵字全部撈到session裡面
第二個關鍵字再從Session抓出來呢?

再問一個問題一般關鍵字搜尋在SQL語法中要怎寫
以前我都是這樣做

CODE:
[Copy to clipboard]
SELECT * FROM table where stkey like '%serkey%'.
雖然可以找到關鍵字的資料
但卻不能用『多關鍵字』之類的搜尋方式,還是有什麼其他方式?
發表人: daidai    時間: 2014-1-28 06:39 PM

jquery ui 有 自動完成 套件可以使用
http://jqueryui.com/autocomplete/

jquery 事件
http://api.jquery.com/change/

大概的做法如下,請參考看看囉

CODE:
[Copy to clipboard]
$(function() {
        var maxRes = 15;                        // 定義資料最大長度
        var inputOldValue = null;        // 定義欄位舊值
       
        $('#文字輸入欄ID').change(function(){                                // 變更事件
                if ($(this).val() != inputOldValue)                                // 判斷 目前欄位值是否等於舊的值,如果不同就取得新的資料
                {
                        inputOldValue = $(this).val();

                        $("#文字輸入欄ID").autocomplete({
                                source : function(request, response) {        // 資料來源
                                        $.ajax({                                                        // jquery ajax
                                                url : "xxx.php",                                // 處理的網址
                                                dataType : "json",                                // 返回內容的格式
                                                minLength : 1,                                        // 最小長度
                                                data : {                                                // 參數
                                                        max : maxRes,                                // 資料最大長度
                                                        q : $("#文字輸入欄ID").val()// 文字輸入欄值
                                                },
                                                success : function(data) {
                                                        $("#文字輸入欄ID").removeClass("ac_loading");
                                                               
                                                        response($.map(data, function(item) {
                                                                return {
                                                                        label : item.obj_name + " (ID:"
                                                                                        + item.obj_id + ")",
                                                                        value : item.obj_id + ":"
                                                                                        + item.obj_name
                                                                };
                                                        }));
                                                }
                                        });
                                },
                                search : function() {
                                        $(this).addClass('ac_loading');
                                },
                                select : function(event, ui) {
                                        var strArr = ui.item.value.split(':');

                                        $(this).val(strArr[1]);
                                        $("#itemId").val(strArr[0]);

                                        return false;                               
                                },
                                open : function() {
                                        $(this).removeClass("ui-corner-all").addClass("ui-corner-top");
                                },
                                close : function() {
                                        $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
                                }
                        }
                });       
        });
});
Server及瀏覽器端做關鍵字的解析,可以有很多種變化應用@@...

SQL 可以試試
SELECT * FROM table where (stkey like '%serkey%' OR  stkey like '%serkey1%'  OR stkey like '%serkey2%')

[daidai 在  2014-1-28 06:48 PM 作了最後編輯]
發表人: cnp    時間: 2014-1-31 12:28 AM

感覺Server的Cache要做好, 不然一直query db負擔會蠻重的@@
發表人: kevenyang    時間: 2014-5-19 03:37 PM

SQL的語法真的要多參考別人的才能精進!
發表人: kevenyang    時間: 2014-5-19 03:39 PM

SQL的語法真的要多參考別人的才能精進!




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0