sql server全文检索问题真是头痛最近发现在检索xml的问题说明:1、使用sql server2005;2、将xml文件存成varbinary(max);3、全文检索使用中文;结果发现 对xml文件的检索效果非常不好。
问题:
1、有些可以检索到第1层至第三层的属性值,但有些编码格式的索性什么都没有,什么原因呢?
2、是和编码格式直接相关吗,如果只有这个原因但是即使是编码设成utf-8? 或者gb2312也不能检索到深层的词语是为什么呢?我中英文都试过。
3、将全文检索的伪列设为.txt,立刻就能检索到深层的词了,效果不错,不很理解
4、但是问题来了,即使是设为txt,但还是和xml头文件的编码格式相关,我猜这会不会是全文检索时设置成为中文造成的呢?希望不是,因为其它编码格式的文件我也需要用到,而且顶多也是英文的而已,如果是这个原因,有没有办法对多种编码格式的文件都能检索呢。  目前初步想对这个表设两个全文索引,使用不同的检索语言,不知道行不行~哎,希望各位帮忙解决啊,

解决方案 »

  1.   

    有没有试过字段类别改为nvarchar(max)
      

  2.   

    sql2005,字段可以直接存为xml的。查询可用xml方式检索
      

  3.   

    create table tb(name xml)insert into tb
    select '<f><e>1</e><e>2</e></f>' union all
    select '<f><e>2</e><e>5</e></f>' union all
    select '<f><e>4</e><e>5</e></f>' declare @XuZuoZhe nvarchar(200)
    set @XuZuoZhe = N'5'select * from tb where name.exist('//e[.=sql:variable("@XuZuoZhe")]')=1/*
    name
    -----------------------
    <f><e>2</e><e>5</e></f>
    <f><e>4</e><e>5</e></f>
      

  4.   

    以上两位,谢谢啦但是目前的需求是要求全文检索二进制文件的,xml只是文件格式的一种,我不想将其单独做一块
      

  5.   


    跟编码自然是有关系, 因为全文索引的中文分词本来就有缺陷。 但这个不是根本原因, 根本原因是建于xml类型列上的全文索引是忽略标记的, 而属性值会被当作标记的一部分。
      

  6.   


    按照这种说法,这种情况几乎无法解决问题:
    一方面我的伪列设为xml,由于全文索引是忽略标记的,最终深层次的属性值查不出;
    另一方面将伪列设为txt,由于编码问题,txt是不会自动识别的,所以很多符号会转错。唯一可能的方法是存储的时候程序自动将编码的格式转为utf-8,再设为txt格式。试试看
      

  7.   

    实践表明,不能用utf-8哦,用了utf-16或者根本gb2312是可以的
    中文断词符连utf-8都容不下吗,晕
      

  8.   


    "建于xml类型列上的全文索引是忽略标记的,而属性值会被当作标记的一部分。"这句话不能认同,忽略标记不错,但不会忽略属性值(除非该属性值是数字)。SQL 2005较老版本中有一个BUG,就是只能索引前两层的属性值,我不确定目前是否已经修复。