Lucene 对索引进行检索方式:TermQuery 和 QueryParser

tcf_static 2012-10-12 05:50:56

String fieldName = "contents";
String queryStr = "AAAAAAAAA";
int MAX_NUM = 100;
//TermQuery Lucene 支持的最为基本的一个查询类,它的构造函数只接受一个参数,那就是一个 Term 对象
Term term = new Term(fieldName,queryStr);
Query termQuery = new TermQuery(term);
TopDocs topDocs = searcher.search(termQuery,MAX_NUM);

//QueryParser Lucene查询分析器 任意组合queryStr,完成复杂操作
Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_31);
QueryParser parser = new QueryParser(Version.LUCENE_31,fieldName, luceneAnalyzer);
Query query = parser.parse(queryStr);
TopDocs topDocs = searcher.search(query,MAX_NUM);


使用 QueryParser 查询分析器 能够检索的docs,但是使用查询类TermQuery 却检索不到docs,
在创建索引的时候使用StandardAnalyzer分词处理。 检索时 是否必须指定创建索引时用到的Analyzer??
如果是必须的话,实现查询类TermQuery又怎么去关联Analyzer
...全文
324 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bareheadzzq 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

关键问题 竟然是检索关键字的大小写问题 在检索文件中 关键字全部小写化
用QueryParser指定 StandardAnalyzer时 StandardAnalyzer底层会将关键字小写化
[/Quote]
恩咯。确实是这样子的。如果想去掉分词时将关键字小写化的话需要自定义个分词器
tcf_static 2012-10-19
  • 打赏
  • 举报
回复
关键问题 竟然是检索关键字的大小写问题 在检索文件中 关键字全部小写化
用QueryParser指定 StandardAnalyzer时 StandardAnalyzer底层会将关键字小写化
tcf_static 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

哦亲。 QueryParser检索的时候就必须指定。 TermQuery不需要。 TermQuery是根据分词后的Term来检索的。所以不需要啦。

[/Quote]
谢谢
讨论下
用TermQuery我没有检索到哎,无论是用luke 还是QueryParser检索时都有结果集
bareheadzzq 2012-10-14
  • 打赏
  • 举报
回复
哦亲。 QueryParser检索的时候就必须指定。 TermQuery不需要。 TermQuery是根据分词后的Term来检索的。所以不需要啦。

介绍你个好东东。http://code.google.com/p/luke/ (对应你Lucene的版本哦)能够查看lucene生产的那些索引文件。 这里你能看到有些域进行分词以后的Term。。


67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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