注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

陈钟鸣的博客

独立之精神,自由之思想.

 
 
 

日志

 
 

帮同事写的keyword检索  

2008-05-29 18:27:32|  分类: oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

测试不够,明天大量数据测一下.备忘.

--prepare data

SQL> create table txt (txt varchar2(1000));

 

表が作成されました。

 

SQL> insert into txt values('');

 

1行が作成されました。

 

SQL> insert into txt values('sony');

 

1行が作成されました。

 

SQL> insert into txt values('ソニー');

 

1行が作成されました。

 

SQL> commit;

 

コミットが完了しました。

 

SQL> create index txt_ind on txt(txt)

  2  indextype is ctxsys.context

  3  parameters ('lexer japanese_lexer memory 16m sync(on commit)') parallel 2 online;

 

索引が作成されました。

 

 

 

--create function in oracle(coconet/coconet@coconet)

 

--***********************************************************************

-- get keyword from table KEYWORD_SYNONYM

--***********************************************************************

create or replace function getkeyword(v_keyword varchar2) return varchar2 is
  type array is table of KEYWORD_SYNONYM%rowtype;
  result varchar2(4000);
  l_data array;
  cursor mycursor(v_1 varchar2) is
    select
      KEYWORD_ID,
      SYNONYM_TX,
      SORT_NO,
      DELETE_FG
    from KEYWORD_SYNONYM
    where  DELETE_FG = '0' and KEYWORD_ID =
      (select KEYWORD_ID from KEYWORD_SYNONYM where SYNONYM_TX=v_1 and rownum=1);

begin
  result := ' ';
  open mycursor(v_keyword);
 
  loop
    fetch mycursor bulk collect into l_data limit 300;
     if l_data.count > 0 then
        for i in l_data.FIRST .. l_data.count
        loop
          if trim(l_data(i).SYNONYM_TX) is not null then
             result := result||l_data(i).SYNONYM_TX||' or ';
          end if;
        end loop ;
     else
        exit;
     end if;
   -- exit when mycursor%notfound;
  end loop;
 
  close mycursor;
  if result is null then
    result := v_keyword;
  else
    result := substr(result,1,length(result) - 3);
  end if;
 
  return result;
  exception
    when others then
       RAISE_APPLICATION_ERROR(-20001, 'get keyword happended a error.');
end;

--***********************************************************************

 

 

--test

SQL> select a.*,getkeyword('sony') keyword from txt a where contains(txt,getkeyword('sony'))>0;

 

TXT                                      KEYWORD

---------------------------------------- ----------------------------------------

sony                                      SONY or sony or そにー or ソニー

ソニー                                    SONY or sony or そにー or ソニー

 

 

SQL> select a.*,score(1) score from txt a where contains(txt,getkeyword('sony'),1) > 0 order by score(1) desc;


 TXT                                           SCORE
---------------------------------------- ----------
ソニー                                            5
sony ltd                                          5
sony                                              4

  评论这张
 
阅读(77)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017