1. 程式人生 > >根據多個欄位搜尋

根據多個欄位搜尋

package loaderman.search;

import java.util.ArrayList;
import java.util.List;

import loaderman.entity.Article;
import loaderman.util.LuceneUtil;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.junit.Test; /** * 演示Lucene中,根據多個欄位搜尋*/ public class ArticleDao {
/** * 增加document物件索引庫中 */ @Test public void add() throws Exception{ Article article = new Article(1,"學習","額外額外為",10); //Article article = new Article(2,"學習","額外it為",20); //Article article = new Article(3,"學習","額it額",20); //Article article = new Article(4,"學習","嗯嗯it嗯嗯",30);
Document document = LuceneUtil.javabean2document(article); IndexWriter indexWriter = new IndexWriter(LuceneUtil.getDirectory() ,LuceneUtil.getAnalyzer(),LuceneUtil.getMaxFieldLength()); indexWriter.addDocument(document); indexWriter.close(); } @Test public void findAll() throws Exception{ String keywords = "機構"; List<Article> articleList = new ArrayList<Article>(); //單欄位搜尋 //QueryParser queryParser = new QueryParser(LuceneUtil.getVersion(),"title",LuceneUtil.getAnalyzer()); //多欄位搜尋,好處:搜尋的範圍大,最大限度匹配搜尋結果 QueryParser queryParser = new MultiFieldQueryParser( LuceneUtil.getVersion(), new String[]{"content","title"}, LuceneUtil.getAnalyzer()); Query query = queryParser.parse(keywords); IndexSearcher indexSearcher = new IndexSearcher(LuceneUtil.getDirectory()); TopDocs topDocs = indexSearcher.search(query,100); for(int i=0;i<topDocs.scoreDocs.length;i++){ ScoreDoc scoreDoc = topDocs.scoreDocs[i]; int no = scoreDoc.doc; Document document = indexSearcher.doc(no); Article article = (Article) LuceneUtil.document2javabean(document,Article.class); articleList.add(article); } for(Article a : articleList){ System.out.println(a); } } }
package loaderman.entity;

/**
 * 文章
 */
public class Article {
    private Integer id;//編號
    private String title;//標題
    private String content;//內容
    private Integer count;//字數
    public Article(){}
    public Article(Integer id, String title, String content, Integer count) {
        this.id = id;
        this.title = title;
        this.content = content;
        this.count = count;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Integer getCount() {
        return count;
    }
    public void setCount(Integer count) {
        this.count = count;
    }
    @Override
    public String toString() {
        return "編號:" + id + "標題:" + title + "內容:" + content + "字數: " + count;
    }
}