lucene Query搜索

WildcardQuery通配符查询,给整个文本建立索引,通过通配符匹配搜索,通过通配符的全文搜索

WildcardQuery通配符查询

package TestQuery;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TestBooleanQuery {
public static void main(String[] args) throws IOException {

        Analyzer analyzer=new StandardAnalyzer();
        String indexDir="C:/Users/yihong/Desktop/luceneindex";
        Directory dir=FSDirectory.getDirectory(indexDir);
        IndexSearcher searcher=new IndexSearcher(dir);
        ScoreDoc [] hits=null;
        Term nterm=new Term("name","*g??");
        WildcardQuery wildcardQuery=new WildcardQuery(nterm);
        Term aterm=new Term("address","tianjing");
        TermQuery termQuery=new TermQuery(aterm);
        BooleanQuery query=new BooleanQuery();
        query.add(wildcardQuery, BooleanClause.Occur.SHOULD);
        query.add(termQuery, BooleanClause.Occur.MUST_NOT);
        TopDocs topDocs=searcher.search(query, 10);

        hits=topDocs.scoreDocs;
        for(int i=0;i<hits.length;i++){
            Document doc=searcher.doc(hits[i].doc);
//          System.out.print(hits[i].score+" ");
            System.out.print(doc.get("id")+" ");
            System.out.print(doc.get("name")+" ");
            System.out.print(doc.get("address")+" ");
            System.out.println(doc.get("birthday")+" ");
        }
        searcher.close();
        dir.close();

    }
}

给整个文本建立索引

package TestQuery;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TestFileReaderForIndex {
    public static void main(String[] args) throws IOException {
        File file=new File("F:/java学习/java搜索及网页爬虫/01、Lucene视频教程/01 lucene基础/code/data.txt");
        FileReader fRead=new FileReader(file);
        char [] chs=new char [60000];
        fRead.read(chs);

        String strtemp=new String(chs);

        String [] strs=strtemp.split("Database: Compendex");

        System.out.println(strs.length);
        for(int i=0;i<strs.length;i++){
            strs[i]=strs[i].trim();

         }

        Analyzer analyzer=new StandardAnalyzer();
        String indexDir="C:/Users/yihong/Desktop/luceneindex";
        Directory dir=FSDirectory.getDirectory(indexDir);

        IndexWriter writer=new IndexWriter(dir,analyzer,false,IndexWriter.MaxFieldLength.UNLIMITED);

         for(int i=0;i<strs.length;i++){
             Document document=new Document();

             document.add(new Field("contents",strs[i],Field.Store.YES,Field.Index.ANALYZED));
             writer.addDocument(document);
         }
         writer.optimize();
         writer.close();
         dir.close();
         System.out.println("index ok!");
    }
}

通过通配符匹配搜索

package TestQuery;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TestWildcardQuery {
    public static void main(String[] args) throws IOException {
        Analyzer analyzer=new StandardAnalyzer();
        String indexDir="C:/Users/yihong/Desktop/luceneindex";
        Directory dir=FSDirectory.getDirectory(indexDir);
        IndexSearcher searcher=new IndexSearcher(dir);
        ScoreDoc [] hits=null;
        Term term=new Term("name","*g???");
        WildcardQuery query=new WildcardQuery(term);

        TopDocs topDocs=searcher.search(query, 10);

        hits=topDocs.scoreDocs;
        for(int i=0;i<hits.length;i++){
            Document doc=searcher.doc(hits[i].doc);
//          System.out.print(hits[i].score+" ");
            System.out.print(doc.get("id")+" ");
            System.out.print(doc.get("name")+" ");
            System.out.print(doc.get("address")+" ");
            System.out.println(doc.get("birthday")+" ");
        }
        searcher.close();
        dir.close();

    }
}

通过通配符的全文搜索

package TestQuery;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TestWildcardQuery1 {
    public static void main(String[] args) throws IOException {
        Analyzer analyzer=new StandardAnalyzer();
        String indexDir="C:/Users/yihong/Desktop/luceneindex";
        Directory dir=FSDirectory.getDirectory(indexDir);
        IndexSearcher searcher=new IndexSearcher(dir);
        ScoreDoc [] hits=null;
        Term term=new Term("contents","modeling");
//      WildcardQuery query=new WildcardQuery(term);
        TermQuery query=new TermQuery(term);
        TopDocs topDocs=searcher.search(query, 126);

        hits=topDocs.scoreDocs;
        for(int i=0;i<hits.length;i++){
            Document doc=searcher.doc(hits[i].doc);
            System.out.print(hits[i].score+" ");
            System.out.println(doc.get("contents")+" ");
        }
        searcher.close();
        dir.close();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值