sql2000全文检索的问题,如我输入查询内容:“图壁厂1号”查询出来的内容不正确

pei051027 2008-07-09 03:42:47
具体是这样:

查询内容: 结果:

“图壁厂1号” 只要含有“图壁厂“三个字的都出来了

“图壁厂11号” 查询正确


意思就是说只要是那个1号的“1”是小于10的数字,查询都不正确,
只要是大于10的查询都正确


我想问问sql2000的 全文检索在获取关键字的时候怎么取的?我的这个为什么不正确?
...全文
160 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuyang840117 2008-07-09
  • 打赏
  • 举报
回复
下面是我写的共通 参考下

public class MCHBaseClass
{
private DataSet ds = new DataSet();
private string mPath = "";

public DataSet getDS()
{
return ds;
}

/// <summary>
/// 加载获取的MXL 获取XML路径
/// </summary>
/// <param name="path"></param>
public void LoadSetting(string path)
{
this.mPath = path;
this.ds = new DataSet();

try
{
ds.ReadXml(@mPath);
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
throw;
}
}

public DataTable Getting(string fNode)
{
DataTable dt = new DataTable();

try
{
dt = ds.Tables[fNode];
return dt;

}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
throw;

}
}

/// <summary>
/// 获取fNode父节点下第intKey行 strSection的属性值
/// </summary>
/// <param name="fNode">父节电名称</param>
/// <param name="intKey">行数</param>
/// <param name="strSection">属性名称</param>
/// <returns></returns>
public string Getting(string fNode, int intKey, string strSection)
{
string strValue = "";

try
{
strValue = Convert.ToString(ds.Tables[fNode].Rows[intKey][strSection]);
return strValue;

}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
throw;

}
}

/// <summary>
/// 把ds写到路径mPath下,保存成XML
/// </summary>
/// <param name="ds1"></param>
/// <param name="mPath1"></param>
public void SaveSettings(DataSet ds1, string mPath1)
{
try
{
ds1.WriteXml(@mPath1);
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
throw;
}
}

/// <summary>
/// 更改父节点为fNode 第intKey行 strSection属性值 为strDefaultValue
/// </summary>
/// <param name="fNode">父节点名称</param>
/// <param name="intKey">行数</param>
/// <param name="strSection">属性名称</param>
/// <param name="strDefaultValue">更改的值</param>
public void SetSetting(string fNode, int intKey, string strSection, string strDefaultValue)
{
try
{
ds.Tables[fNode].Rows[intKey][strSection] = strDefaultValue;
ds.AcceptChanges();
this.SaveSettings(ds,mPath);

}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
throw;
}

}

/// <summary>
/// 在父节点为fNode intKey行 添加 属性名称strSection 值strDefaultValue
/// </summary>
/// <param name="fNode">父节点名称</param>
/// <param name="intKey">行数</param>
/// <param name="strSection">添加的属性名称</param>
/// <param name="strDefaultValue">属性值</param>
public void AddSettings(string fNode, int intKey, string strSection, string strDefaultValue)
{
try
{
ds.Tables[fNode].Columns.Add(strSection);
ds.Tables[fNode].Rows[intKey][strSection] = strDefaultValue;
ds.AcceptChanges();
this.SaveSettings(ds, mPath);
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
throw;
}
}

/// <summary>
/// 删除父节点为fNode下的 属性值strSection
/// </summary>
/// <param name="fNode"></param>
/// <param name="strSection"></param>
public void DeleteSettings(string fNode, string strSection)
{
try
{
ds.Tables[fNode].Columns.Remove(strSection);
ds.AcceptChanges();
this.SaveSettings(ds, mPath);
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
throw;
}
}
}
hexiaoyulee 2008-07-09
  • 打赏
  • 举报
回复
发sql语句吧
sql2000不会把“图壁厂1号”省略成“图壁厂”
pupo 2008-07-09
  • 打赏
  • 举报
回复
单词断字符的语言用neutral看看
xuyang840117 2008-07-09
  • 打赏
  • 举报
回复
把你 sql 语句发一下 估计是你写的问题
pei051027 2008-07-09
  • 打赏
  • 举报
回复
不是的,虽然是模糊查询的,但是这个“图壁厂”三个字我可以换成其他的字,
如“加加减减1号”,
我说的这个问题,是说sql2000在全文检索的时候在取关键字的时候会不会不准确,把“图壁厂1号”省略成“图壁厂”
pupo 2008-07-09
  • 打赏
  • 举报
回复
可能是SQL Server本身中文分词的问题
hexiaoyulee 2008-07-09
  • 打赏
  • 举报
回复
好象说得不是很清楚
查询 like ‘图壁厂1%号’时
只要字段在%两边符合就在结果里面
图壁厂1号 和 图壁厂11号都满足查询要求
而查询 like ‘图壁厂11%号’时
只有图壁厂11号满足条件,图壁厂1号不满足
hexiaoyulee 2008-07-09
  • 打赏
  • 举报
回复
你查询的时候是不是输入数字然后模糊查询?
数字输入为N
查询 like ‘图壁厂N%号’
如果N为单位数1,2...9
当然由于匹配会把1,2...9开头的数字都查询出来
如果N为双位的
由于查询匹配更精确
查询结果正确
pei051027 2008-07-09
  • 打赏
  • 举报
回复
“图壁厂”这个只是个事例,
我是说在sql全文检索的时候,sql他忽略了(1,2,3,4..9)这写单个数字,
搜索关键字为“图壁厂1号”的搜索结果和关键字为“图壁厂”搜索的内容是一样的。
但是1号要是变成两位数字(10,11....)就查询正确


skison 2008-07-09
  • 打赏
  • 举报
回复
like ‘图壁厂[1-9][0-9]%号’
skison 2008-07-09
  • 打赏
  • 举报
回复
like ‘图壁厂[1-9][^号]’
skison 2008-07-09
  • 打赏
  • 举报
回复
like ‘图壁厂[1-9][0-9]号’
pei051027 2008-07-09
  • 打赏
  • 举报
回复
嗯,是的
就是SQL2000中的全文检索那个功能,全文目录
bbbbbb888888 2008-07-09
  • 打赏
  • 举报
回复
是直接SQL中的%查询么?是不是检索的算法有问题
pei051027 2008-07-09
  • 打赏
  • 举报
回复
就是说查询“图壁厂1号”或者“图壁厂2号”或者“图壁厂3号”等等,
(1,2,3,4,5,6,7,8,9)号 这些查询的时候不正确

但是如果是:“图壁厂10号”,或者“图壁厂11号”等等
(10以上的)查询都正确

不知道说清楚了没?
pei051027 2008-07-09
  • 打赏
  • 举报
回复
就是说查询“图壁厂1号”或者“图壁厂2号”或者“图壁厂3号”等等,
(1,2,3,4,5,6,7,8,9)号 这些查询的时候不正确

但是如果是:“图壁厂10号”,或者“图壁厂11号”等等
(10以上的)查询都正确

不知道说清楚了没?
skison 2008-07-09
  • 打赏
  • 举报
回复
大于小于没听明白 那个似乎是图示列表的说明也没看明白

解释清点吧

110,596

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧