我的程序中,blob字段一定要放的是DOC,PDF类型文件的内容
  我通过java已将Word文件的全部数据存入Oracle的Bolb列中,读库、编辑、存库均已成功。问题是:如何对Blob列中的二进制格式 Word文件进行全文检索?
  我感觉是filter的问题,好象它不支持对含有中文字符的文档的过滤,intermedia实际上是用filter将BLOB中的字段转化成纯文本,然后在纯文本上建索引,所以我猜测,它不支持对含有中文字符的文件的过滤,各位大哥有什么好方法,指点一下,

解决方案 »

  1.   

    不好意思,我好像在什么地方看到说blob不能直接检索
    好像要使用dbms_lob包,具体什么函数你自己查一下
      

  2.   

    改用clob试试,对blob全文搜索是有点问题
    用dbms_lob.instr(nr,'中国')>1,如不行,可以自定一个函数,看否行?
    既然你成功读取,那可用方法做一个函数,在函数体内把该字段读出来,进行比较,或是真,那就回1,假返回0.
      

  3.   

    感谢楼上的两位大哥,因为要检索文件,所以只能用BLOB字段,clob字段可以存文件内容吗?ORACLE有一个例子是将PPT文件内容导入到BLOB字段中的,但内容是全英文的,结果可以检索,为什么我加中文就不可以了,还有,我用过dbms_lob包,用那个函数确实可以,但不能检索内容是文件的,而且失去intermedia的本来意义了,intermedia本来就是不用函数而全文检索的,用那个函数包也不能检索文件,而且速度不太快,当记录多的话,速度不快
      

  4.   

    ORACLE文挡里有例子,是用select mlxh from zlmlnr where contains(nr,'中国',1)>0; 语句啊,说支持varchar2,clob,long,blob等多中类型字段的啊,没道理我用BLOB字段不可以的,郁闷死我了!!!!!!!!!!!
      

  5.   

    check DR$<INDEXNAME>$I '中国'在吗?
      

  6.   

    what's your nls_lang setting ?
      

  7.   

    if you are using ctxsys.null_filter ? what will happen ?
      

  8.   

    null_filter也不可以啊,我都试过了
      

  9.   

    to scorpionmxk (爱人的林) :
    把你的email告诉我,我给你发一个文档。那是我以前写的,希望能对你有帮助。以前曾经做过文本检索的实验,现在都忘记了,幸好还有文档。
      

  10.   

    楼上的大哥 ,万分感谢 [email protected]
      

  11.   

    可以对pdf,word文档进行全文检索吗 ?
      

  12.   

    to scorpionmxk (爱人的林) :文档已经发过去了,注意接收,可以对pdf,word文档全文检索。
      

  13.   

    试试将ctx_ddl.create_preference('myfilter','inso.filter'),
    再用它建立索引,我这么做可以过引word、ppt、excel文档没问题,只是在索引
    中文PDF文档时没成功,可能是Oracle本身的ctxhx有问题。你要是解决了这个
    问题,通知我吧!
      

  14.   

    楼上的 ,你的oracle版本是什么,我的 是8.1.7,我猜可能是版本的问题
      

  15.   

    zcs_1(生生不息) 还是不行,还是inso_filter
    的问题,索引都建不起来,我想是不是版本的问题
      

  16.   

    我当时用Oracle816和Oracle815试验都可以,不过也出现了一些小问题,就是对于某些文档建立索引有问题。
    建议你用Oracle816试试,按照我的文档步骤来做,最起码应该可以检索出来纪录的。
      

  17.   

    另外,建议你看看机械工业出版社的《Oracle8i数据库开发技术与技巧》一书,上面对Oracle InterMedia Text有专门的介绍,比较详细。
      

  18.   

    谢谢楼上的大哥,有个疑问,我以前的步骤和你差不多,就缺少下面这一步
    d、 创建inso_filter.cmd程序,e、 并把该程序放入ORACLE_HOME\ctx\bin目录:
    set oracle_home=d:\oracle\ora81
    ctxhx.exe %1 %2 chinesegb gb2312这到底是什么意思,在8.1.7下,ctx目录下没有bin目录,我是自己新建的,不知道是不是这步出错了,还有下面这些步骤,我根本就不用设,8.1.7里面都已经设好了,什么不用改,很怪异!!!a、 配置IPC监听地址,b、 例如

        LISTENER =
         (ADDRESS_LIST=
            (ADDRESS=
              (PROTOCOL=tcp) (HOST=tech035) (PORT=1521)
            )
        )
    改为
         LISTENER =
           (DESCRIPTION_LIST =
              (DESCRIPTION =
               (ADDRESS_LIST =
                (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC0))
                )
               (ADDRESS_LIST =
                (ADDRESS = (PROTOCOL = TCP) (HOST = ap118sun) (PORT=1521))
                )
               )
            )c、 增加一个系统标d、 示符和一个程序名,e、 例如
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = D:\Oracle\Ora81)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (GLOBAL_DBNAME = orcl)
          (ORACLE_HOME = D:\Oracle\Ora81)
          (SID_NAME = orcl)
        )
      )f、 对于EXTPROC0增加网络描述服g、 务名h、 描述入口,i、 这需要修改客户端和服j、 务器端的tnsnames.ora文件,k、 注意在文件的CONNECT_DATA部分用SID而l、 不m、 是用SERVICE_NAME,n、 例如,o、 可以将下列部分放入文件末端
    extproc_connection_data =
           (DESCRIPTION=
              (ADDRESS_LIST =
                 (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
              )
              (CONNECT_DATA=
                 (SID=PLSExtProc)
                 (PRESENTATION = RO)
              )
           )
      

  19.   

    创建inso_filter.cmd程序,
    并把该程序放入ORACLE_HOME\ctx\bin目录:
    set oracle_home=d:\oracle\ora81
    ctxhx.exe %1 %2 chinesegb gb2312上面的步骤很关键,它使得建立的索引对中文也可以检索.至于bin目录的问题,我忘记当时是不是我自己建立的,我当时用oracle816.你可以装装816试试.
    至于其他的配置,如果已经配置好了就不用管了.我还是建议你看看《Oracle8i数据库开发技术与技巧》这本书,我的实验就是根据这本书的指导完成的,其他的问题应该可以在书中找到答案.
    因为好久没有接触这方面的内容,很多东西都记不得了.
      

  20.   

    你的数据库里面能否通过pl/sql检索数据的时候,显示数据为中文
    NLS_LANG是指环境变量,指定ORACLE支持的字符集