日期:2014-05-18  浏览次数:20523 次

lucene.net分词搜索问题求解
数据表内容:
id content
1 言归正传,为什么要把web服务器与数据库分开放置呢?
2 数据库配置该如果进行
3 服务器该怎么防攻击?


我采用的是射日分词分析器建立索引和搜索的。

当我搜索关键词: 数据库 结果id为 1,2
当我搜索关键词: 数据库 服务器 结果id为 1,2, 3
当我搜索关键词: 数据库服务器 结果id为 空
当我搜索关键词: 服务器数据库 结果id为 空

我插了下搜索关键词的拆分,服务器数据库和数据库服务器都能拆分为2个关键词:数据库 服务器
为什么却搜索不出结果1,2,3呢?

------解决方案--------------------
lucene.net的中文分词器一般都用盘古,或者官方的中文分词器,这个射日没听过。。
至于你的搜索结果,应该是这个分词组件对关键字进行最大匹配的原因吧。
lucene的搜索是把用户的输入当作一篇文档(而不是一个关键词),它的搜索打分的过程是对两篇文档(用户输入的内容和索引中的文档)的关联、相似程度进行打分。所以我们知道,搜索和创建索引的过程一样,也会对用户输入的内容进行词法分析,另外搜索时还会有语法分析。
像你的这种情况,当用户输入的内容包含空格的时候,lucene会自动把它当成用空格分隔的多个词,这是语法分析的作用。如果不包含空格,你就要让searcher知道这是一篇要经过分词的文档,而不能当它是一个长词语。
拿盘古来说:
C# code

QueryParser queryParser = new QueryParser("contents", new PanGuAnalyzer(true));
string q = GetKeyWordsSplitBySpace(keywords, new PanGuTokenizer());
Query query = queryParser.Parse(q);