Lucene多欄位查詢&高亮顯示
- 在百度搜尋的時候,查詢的關鍵詞會高亮顯示
- 在搜尋一個關鍵詞的時候,有可能這個關鍵詞在title和content中,搜尋的時候要把結果全部顯示出來
例項說明
package com.bart.lucene.mutilseacher;
import java.util.ArrayList;
import java.util.List;
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.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.junit.Test;
import com.bart.lucene.entity.Article;
import com.bart.lucene.util.LuceneUtils;
/**
* Article多條件搜尋加高亮顯示
* @author hp
*/
public class ArticleDao {
/**
* 高亮顯示
* 查詢索引庫中所有的記錄
* @throws Exception
*/
@Test
public void findAll() throws Exception{
String keyword = "顯示卡";
List<Article>articleList = new ArrayList<Article>();
IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.getDirectory());
//預設之搜尋一個欄位,單條件搜尋
//QueryParser queryParser = new QueryParser(LuceneUtils.getVersion(),"content",LuceneUtils.getAnalyzer());
//搜尋多個欄位,多條件搜尋
QueryParser queryParser2 = new MultiFieldQueryParser(LuceneUtils.getVersion(),new String[]{"title","content"},LuceneUtils.getAnalyzer());
//Query query = queryParser.parse(keyword);
Query query = queryParser2.parse(keyword);
TopDocs topDocs = indexSearcher.search(query,100);
//以下程式碼對查詢結果進行高亮顯示
// 1.格式化物件,設定字首和字尾
Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>");
// 2.關鍵詞物件
Scorer scorer = new QueryScorer(query);
// 3. 高亮物件
Highlighter highlighter = new Highlighter(formatter, scorer);
for(int i=0;i<topDocs.scoreDocs.length;i++){
ScoreDoc scoreDoc = topDocs.scoreDocs[i];
int no = scoreDoc.doc;
//關鍵詞沒有高亮
Document document = indexSearcher.doc(no);
// 1. 關鍵詞新增高亮
String titleHighLight = highlighter.getBestFragment(LuceneUtils.getAnalyzer(),"title",document.get("title"));
String contentHighLight = highlighter.getBestFragment(LuceneUtils.getAnalyzer(),"content",document.get("content"));
// 2. 將高亮的結果再次封裝到document物件中
document.getField("title").setValue(titleHighLight);
document.getField("content").setValue(contentHighLight);
Article article = LuceneUtils.document2JavaBean(document,Article.class);
articleList.add(article);
}
//遍歷
for(Article a : articleList){
System.out.println(a);
}
}
/**
* 增加document物件到物件索引庫中
* @throws Exception
*/
@Test
public void testCreate() throws Exception{
Article article = new Article(1,"顯示卡","顯示卡是電腦的核心部件",10);
Document document = LuceneUtils.javaBean2Document(article);
IndexWriter indexWriter = new IndexWriter(LuceneUtils.getDirectory(), LuceneUtils.getAnalyzer(), LuceneUtils.getMaxFieldLength());
indexWriter.addDocument(document);
//設定當插入三條記錄的時候合併到同一條記錄,預設是10個快取就合併索引的cfs檔案
indexWriter.setMergeFactor(3);
// //合併記錄,不管插入多少條
// indexWriter.optimize();
indexWriter.close();
}
}
輸出結果:
Article [id=1, title=顯卡, content=顯卡是電腦的核心部件, count=10]
相關文章
- lucene 多欄位查詢-MultiFieldQueryParser
- ES查詢之查詢屬性過濾、結果高亮顯示
- Elasticsearch 單字串多欄位查詢Elasticsearch字串
- Elasticsearch 複合查詢——多字串多欄位查詢Elasticsearch字串
- 如何把SAP CRM WebClient UI上某個欄位高亮加粗顯示WebclientUI
- Python 查詢PDF中的指定文字並高亮顯示Python
- mysql多表多欄位查詢並去重MySql
- clob 欄位查詢
- [Elasticsearch] 多欄位搜尋 (二) - 最佳欄位查詢及其調優(轉)Elasticsearch
- [Mysql 查詢語句]——查詢欄位MySql
- MySQL簡單實現多欄位模糊查詢MySql
- SQL“多欄位模糊匹配關鍵字查詢”SQL
- Sqlplus查詢時不能顯示標題欄SQL
- Lucene查詢原理
- mysql sql同一個欄位多個行轉成一個欄位查詢MySql
- 在 with 查詢中只查詢個別欄位
- Elasticsearch 高亮查詢Elasticsearch
- where語句中多條件查詢欄位NULL與NOT NULL不確定性查詢Null
- sql根據多個欄位查詢重複記錄SQL
- mysql查詢顯示技巧MySql
- 查詢/刪除重複的資料(單個欄位和多個欄位條件)
- ArcGIS對欄位分割查詢操作
- Oracle 查詢欄位詳細資訊Oracle
- 如何在Clob欄位中查詢
- 查詢oracle欄位預設值Oracle
- [備查]使用 SPQuery 查詢 "Person or Group" 欄位
- ES 筆記二十:單字串多欄位查詢:Dis Max Query筆記字串
- MySQL - 一個欄位儲存多個ID時的查詢MySql
- Lucene的分頁查詢
- ultraedit高亮顯示pl/sqlSQL
- ES 筆記十九:Query & Filtering 與 多字串多欄位查詢筆記Filter字串
- ES 筆記二十一:單字串多欄位查詢: Multi Match筆記字串
- 模型聯合查詢返回指定欄位模型
- 根據欄位名查詢所有表
- 查詢某個欄位的不同值
- Easy UI Combobox顯示拼接欄位UI
- 在 SAP MM 物料顯示介面上看到一個欄位,如何查詢哪張資料庫表的哪個欄位進行的儲存資料庫
- TextView搜尋文字高亮顯示TextView