根据前面博文 http://blog.csdn.net/a276202460/archive/2010/05/25/5623829.aspx
中写到的查询的基类,测试下termquery的使用,不多说写代码 写到哪算哪
/**************** * *Create Class:TermQuerySearch.java *Author:a276202460 *Create at:2010-5-25 */ package com.rich.lucene.searcher; import org.apache.lucene.document.Field; import org.apache.lucene.index.Term; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.apache.lucene.util.Version; import com.rich.lucene.util.IndexKeys; public class TermQuerySearch extends Searcher { public static void main(String[] s) throws Exception { // private final String[] bizes = { "db", "ws", "jms", "lucene" }; /* * doc.add(new Field(IndexKeys.TEST_BIZ, bizes[random * .nextInt(bizes.length)], Field.Store.YES, Field.Index.NOT_ANALYZED)); * 索引在创建的时候并没有对此字段进行分词 因为只有一个字段分不分词没效果 */ TermQuery termquery = new TermQuery(new Term(IndexKeys.TEST_BIZ, "db")); TermQuerySearch searcher = new TermQuerySearch(); searcher.Search(termquery); /* * 查询的结果总数为250307 和当初创建索引的时候 逻辑上是对上了 100W随机4个值 每个值25W左右 >>>>>>>>>>>> * User Query:testbiz:db >>>>>>>>>>>> Query Use:31ms >>>>>>>>>>>> Total * Result:250307 * 这样的查询看起来和数据库查询中的where biz = 'db' 差不多只是做了一个等的查询 和baidu google * 的查询时有些不一样 这样操作大DB的query还是很方便的 既然作索引的时候用到了分词器 查询的时候对于搜索 * 文本的切割和比重计算应该也是必须的 比如一片文章中有java lucene weblogic 将这三个词作为搜索文本 * 应该能搜索到所有包含这些词中的最少一个就可以作为结果返回 当然要看切词器怎么切分搜索文本切分为几个词 */ QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, IndexKeys.TEST_BIZ, searcher.getAnalyzer()); Query analyzquery = parser.parse("db ws"); searcher.Search(analyzquery); /* * 这样查询结果就是 * >>>>>>>>>>>> User Query:testbiz:db testbiz:ws >>>>>>>>>>>> Query Use:110ms >>>>>>>>>>>> Total Result:499645 * Query的tostring可以看出来 相当于termquery的两个查询 关系吗就是sql中的or逻辑了 * 在测试下针对大文本的带分词的所关键词查询看看是不是or呢 其实我也不知道 */ QueryParser contentparser = new QueryParser(Version.LUCENE_CURRENT, IndexKeys.TEST_CONTENT, searcher.getAnalyzer()); Query contentquery = contentparser.parse("java lucene web jsp"); searcher.Search(contentquery); /* * >>>>>>>>>>>> User Query:testcontent:java testcontent:lucene testcontent:web testcontent:jsp >>>>>>>>>>>> Query Use:1234ms >>>>>>>>>>>> Total Result:1000000 *看样子还是一个简单的or的逻辑并不知道权重怎么弄的 * static public enum Operator { OR, AND } * QueryParser中的这个东西似乎可以确定or和and的关系 用AND和OR代替空格看看 */ QueryParser contentandparser = new QueryParser(Version.LUCENE_CURRENT, IndexKeys.TEST_CONTENT, searcher.getAnalyzer()); Query contentandquery = contentandparser.parse("java AND lucene AND web AND jsp"); searcher.Search(contentandquery); /* * >>>>>>>>>>>> User Query:+testcontent:java +testcontent:lucene +testcontent:web +testcontent:jsp >>>>>>>>>>>> Query Use:1062ms >>>>>>>>>>>> Total Result:1000000//结果还是100W 应该是内容里随机出这些单词的几率很大吧毕竟1000个单词了 用BIZ在后面试下 看样子用and作为分隔关键字查询的就是AND的逻辑了默认的及时OR了 当然肯定还可以用OR作为分隔符 */ QueryParser contentorparser = new QueryParser(Version.LUCENE_CURRENT, IndexKeys.TEST_CONTENT, searcher.getAnalyzer()); Query contentorquery = contentorparser.parse("java OR lucene OR web OR jsp"); searcher.Search(contentorquery); /************************************ >>>>>>>>>>>> User Query:testcontent:java testcontent:lucene testcontent:web testcontent:jsp >>>>>>>>>>>> Query Use:750ms >>>>>>>>>>>> Total Result:1000000 和用分隔符表示出来的查询的字符串表示是一样的 ************************************/ QueryParser bizandparser = new QueryParser(Version.LUCENE_CURRENT, IndexKeys.TEST_BIZ, searcher.getAnalyzer()); Query bizandquery = bizandparser.parse("db AND ws"); searcher.Search(bizandquery); /************************************ >>>>>>>>>>>> User Query:+testbiz:db +testbiz:ws >>>>>>>>>>>> Query Use:47ms >>>>>>>>>>>> Total Result:0 ************************************/ } }
到了看电视的时间了 看电视也是必修课,明天又要被压榨一天,还好没有进富士康上班,明天不要来个12跳。。。。这社会这是怎么了