加了中文分词后, 就查询不到任何东东了

本文探讨了使用Lucene进行中文分词索引时遇到的问题,包括索引创建和查询过程,以及中文分词与切字的效果对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

加了中文分词后, 就查询不到任何东东了,我用Luke工具查询了索引文件,
发现索引完全正常,而且用Luke的Search可以做查询,结果也正常。真是不
知如何是好了?

1) 索引部份代码:
                        WordSegV1 word = new WordSegV1();
                        
                        try
                        {
                                doc.Add(Field.UnStored("text", word.Segment(parseHtml(html),' ')));                                
                                doc.Add(Field.Keyword("path", relativePath));
                                doc.Add(Field.Text("title", word.Segment(getTitle(html),' ')));                                
                                writer.AddDocument(doc);
                        }
                        catch{}

2) 查询部份代码:
                        WordSegV1 word = new WordSegV1();
                        Query query = QueryParser.Parse(word.Segment(this.Query,' '), "text", new WhitespaceAnalyzer());

                        this.Results.Columns.Add("title", typeof(string));
                        this.Results.Columns.Add("sample", typeof(string));
                        this.Results.Columns.Add("path", typeof(string));

                        Hits hits = searcher.Search(query);

分析器全部用了WhitespaceAnalyzer, 因为中文切词后,是用空格分割的。

不知哪儿出了问题,哪位大哥指点一下,谢谢!!!

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

从你给的信息来看,看不出什么明显的错误。
检查两点吧,
1.luke看到的索引结构是按词索引的吗?你的分词程序有没有什么逻辑错误?

2.Query query = QueryParser.Parse(word.Segment(this.Query,' '), "text", new WhitespaceAnalyzer());   debug一下看看你的query是否构造正确。

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

索引中的分词是成功的, 由标题部份可以看出来: 织布 口罩 购物 袋 西服 套 图

呵呵, 谢谢大哥的指点!
确实我再检查一下, Query部份是否有误.

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

请教: Lucene中文索引的处理到底是切字还是切词? 谢谢!!!

我一直认为应当是切词索引,今天有为高手说是切字,害得我不知所措,到底哪个是对的呢?

如果不按词索引, 效率会不会下降很利害呢?
例如: 索引文件巨大, 查询速度变慢呢?


Lucene对于中文索引的处理是切字而不是切词。因此在添加索引的时候不需要WordSeg,
而是使用CnAnalysis或者CJKAnalysis.

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

楼上的有两点误区:
1。分词比不分词,索引文件要小。
   实际上,分词往往造成索引文件过于庞大,原因就在于,词比字这个范围可是大多了。而且处于不断的增长期,词典的大小是符合Heap's Law 分布的。

2。Lucene对于中文索引的处理是切字而不是切词
   实际上,Lucene只是提供了一个建立索引和访问的API,并没有规定你怎么进行中文索引。只不过提供了默认的SimpleAnalyzer是按字切分。

所以,如果没有特别的需要,没必要进行分词,当然,分词可以做很多进一步的检索模型优化,只是对于一般的应用来说,分词的必要性不是特别大了。

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

谢谢!!!

有道理, 但还是不服气, 试验后再和大哥讨论这个话题.

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

可能是我表述有问题:

准确的表述是中文索引采用按字切分还是按词意切分更好?

如果按字切分, 查询时会不会查出一堆不相关的信息呢?

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

QUOTE 以下是引用jsntcw在2005-5-24 18:16:00的发言:
可能是我表述有问题:

准确的表述是中文索引采用按字切分还是按词意切分更好?

如果按字切分, 查询时会不会查出一堆不相关的信息呢?[/QUOTE]


我上个回复已经提到过

所以,如果没有特别的需要,没必要进行分词,当然,分词可以做很多进一步的检索模型优化,只是对于一般的应用来说,分词的必要性不是特别大了。



即使分词,你也不能保证提高检索相关性。反而,因为分词的不准确,而带来的错误放大,可能反而带来检索效果的降低。

目前 ,暂时没有权威的研究结果,表明,分词能有效的提高检索模型的效率,如果我有误解,你可以指出哪篇文章提到过,我来看看他的实验数据。

而提升检索效果,可以通过多种retrieval utilities来实现,比如query expansion,document expansion,term reweighting,clustering,phrase searching ,summarization 等等了。

比如query expansion,可以带来的提升是明显的。

忘记转贴的地址了~不过搜索题目应该知道~以后看到了在改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值