Lucene开发,垂直搜索(比如淘宝,京东类似搜索功能)——第六节 中文分词 搜索

 下面是中文分词搜索的代码:

             (测试代码,稍作改动可以正式使用。以下代码都是在lucene3.x中,最新版本3.4可能有改动。不过思路不变)


    public void searchIKIndexByString(String index){
        //存放索引目录
        File indexDir = new File("D:\\luceneIndex");
        FSDirectory directory;
        try {
            //用索引目录构建directory对象
            directory = FSDirectory.open(indexDir);
            //构造索引搜索器
            IndexSearcher searcher = new IndexSearcher(directory);
            if(!indexDir.exists()){
                 System.out.println("The Lucene index is not exist");
                 return;
            }

           //设置相似度比较器
            searcher.setSimilarity(new IKSimilarity());
        //    String keyword = "中文分词工具包";
            //使用IKQueryParser查询分析器构造Query对象 

          //多条件查询语句构建
            String[] fields={"GoodsName"};
            String[] querys={index};
            Occur[] Occurs={BooleanClause.Occur.MUST};
            Query query = IKQueryParser.parseMultiField(fields, querys, Occurs);
           

             //排序字段(先后顺序即排序优先级,越排前面,优先级越高)
//            SortField sortF = new SortField("sellTotal", SortField.INT,true);
//            Sort sf = new Sort(sortF);
            Sort sort = new Sort(new SortField[]{new SortField("sellTotal",SortField.INT,true),new SortField("time",SortField.STRING,true),new SortField("price",SortField.FLOAT,true)});
            //定义搜索的基本单位。第一个参数代表了要在文档的哪一个 Field 上进行查找,第二个参数代表了要查询的关键词。
//            Term term = new Term(fieldName,keyword);
//            //构造查询对象。构造函数只接受一个 Term 对象

             //对像数据库中%like%查询的测试
//            Query query = new FuzzyQuery(term);
            //搜索相似度最高的5条记录
            TopDocs topDocs = searcher.search(query, null, 1000,sort);
            System.out.println("命中:" + topDocs.totalHits);
            for(int i=0;i<topDocs.totalHits;i++){

                //获取Document 对象
                ScoreDoc scoreDoc=topDocs.scoreDocs[i];
                Document document=searcher.doc(scoreDoc.doc);
                System.out.println("document: "+document.get("GoodsName")+"id: "+document.get("id")+"IsNew: "+document.get("IsNew")+"销量:"+document.get("sellTotal")+" 商品入库时间 :"+document.get("time"));
                System.out.println("商品价格: "+document.get("price"));
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值