Lucene用标准分词器搜索索引

来源:互联网 发布:淘宝店铺有几个橱窗 编辑:程序博客网 时间:2024/04/26 17:11

先来创建索引

//测试创建索引    @Test    public void testIndexWriter() throws IOException{        //创建索引目录        Directory directory = FSDirectory.open(new File("d:\\directory"));        //创建标准分词器        Analyzer analyzer = new StandardAnalyzer();        //索引配置        IndexWriterConfig indexWriterConfig =                 new IndexWriterConfig(Version.LUCENE_4_10_2, analyzer);        indexWriterConfig.setOpenMode(OpenMode.CREATE);        //写索引        IndexWriter indexWriter = new IndexWriter(directory,indexWriterConfig);        //创建文档对象        Document doc = new Document();        doc.add(new IntField("id", 18, Store.YES));        doc.add(new TextField("title", "我们都是党的接班人yes or no?", Store.YES));        doc.add(new LongField("price", 6388L, Store.YES));        doc.add(new StringField("pic", "www.baidu.com", Store.YES));        //添加文档        indexWriter.addDocument(doc);        indexWriter.commit();        indexWriter.close();    }

先不用分词器搜索索引

 @Test    public void testIndexSearch() throws Exception{        //创建索引目录        Directory directory = FSDirectory.open(new File("d:\\directory"));        IndexReader reader = DirectoryReader.open(directory);        IndexSearcher inexSearcher = new IndexSearcher(reader);        //创建查询对象        Query query = new TermQuery(new Term("title","接班人"));        //搜索前5条        TopDocs topDocs = inexSearcher.search(query, 5);        System.out.println("命中文档数:" + topDocs.totalHits);        ScoreDoc[] scoreDocs = topDocs.scoreDocs;        for(ScoreDoc scoreDoc:scoreDocs){            Document doc = inexSearcher.doc(scoreDoc.doc);            System.out.println("标题为:" + doc.get("title"));        }    }

这里写图片描述

再通过标准分词器来搜索

//测试搜索索引--分词器    @Test    public void testIndexSearch() throws Exception{        //创建索引目录        Directory directory = FSDirectory.open(new File("d:\\directory"));        IndexReader reader = DirectoryReader.open(directory);        IndexSearcher inexSearcher = new IndexSearcher(reader);        //创建分词器        Analyzer analyzer = new StandardAnalyzer();        //创建查询解析器        QueryParser queryParser = new QueryParser("title",analyzer);        //创建查询对象        Query query = queryParser.parse("接班人");        //搜索前5条        TopDocs topDocs = inexSearcher.search(query, 5);        System.out.println("命中文档数:" + topDocs.totalHits);        ScoreDoc[] scoreDocs = topDocs.scoreDocs;        for(ScoreDoc scoreDoc:scoreDocs){            Document doc = inexSearcher.doc(scoreDoc.doc);            System.out.println("标题为:" + doc.get("title"));        }    }

这里写图片描述

0 0
原创粉丝点击