Lucene进阶操作,单字段、多字段和布尔搜索
生活随笔
收集整理的這篇文章主要介紹了
Lucene进阶操作,单字段、多字段和布尔搜索
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇文章是入門,現在是進階,通過項目用到的例子給大家呈現較好的方法。本方法基于Lucene-4.7.2因為項目要用到JDK1.6。
這里使用幾個很好用的類,是經過多次試驗整理出來的,分別是單字段搜索,多字段搜索以及布爾搜索。
1?單字段搜索
package com.rbc.hbms.search.util.lucene;import java.io.File; import java.io.IOException; import java.io.StringReader; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.LinkedList; import java.util.List;import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.IntField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.SimpleFragmenter; import org.apache.lucene.search.highlight.SimpleHTMLEncoder; import org.apache.lucene.search.highlight.SimpleHTMLFormatter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version;import com.rbc.hbms.estateView.entity.HbmsHouse; import com.tds.framework.wsmanage.util.StringUtils;/*** 布爾搜索* Created by MoSon on 2017/7/5.*/ public class ATermQuery {public static void main(String[] args) throws IOException, ParseException {List<HbmsHouse> address = getAddressById("114955758");System.out.println(address);}/*** 根據id查詢* @param address 要查詢地址* @param number* @return* @throws IOException* @throws ParseException*/public static List<HbmsHouse> getAddressById(String keyword) throws IOException, ParseException {try {long start = System.currentTimeMillis();System.out.println("開始時間:" + start);// 定義索引目錄// Path path = FileSystems.getDefault().getPath("standardIndex");// Directory directory = FSDirectory.open(path);Directory directory = FSDirectory.open(new File("D:/EclipseWorkspace/zseboss/standardIndex"));// 定義索引查看器IndexReader indexReader = DirectoryReader.open(directory);// 定義搜索器IndexSearcher indexSearcher = new IndexSearcher(indexReader);// 搜索內容// 定義查詢字段/*Term term = new Term("id",id);Query query = new TermQuery(term);*/// IKAnalyzer analyzer = new IKAnalyzer();// 使用IK分詞器StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);//定義分詞器(標準分詞器)QueryParser parser = new QueryParser(Version.LUCENE_47,"id", analyzer); //定義查詢分析器Query query = parser.parse(keyword);/**定義高亮組件*/SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span style='color:red;'>", "</span>");// 構建Scorer,用于選取最佳切片QueryScorer scorer = new QueryScorer(query);// 實例化Highlighter組件Highlighter highlighter = new Highlighter(formatter, scorer);// 構建Fragmenter對象,用于文檔切片highlighter.setTextFragmenter(new SimpleFragmenter(100));highlighter.setEncoder(new SimpleHTMLEncoder());// 定義要獲取的數量// 命中前20條文檔TopDocs topDocs = indexSearcher.search(query, 1);// 打印命中數 // System.out.println("命中數:" + topDocs.totalHits);// 取出文檔ScoreDoc[] scoreDocs = topDocs.scoreDocs;StringBuilder stringBuilder = new StringBuilder();// 遍歷取出數據List<HbmsHouse> list = new LinkedList<HbmsHouse>();for (ScoreDoc scoreDoc : scoreDocs) {HbmsHouse hh = new HbmsHouse();float score = scoreDoc.score; // 相似度// System.out.println("相似度:"+ score);// 通過indexSearcher的doc方法取出文檔Document doc = indexSearcher.doc(scoreDoc.doc);// 獲取idString id = doc.get("id");if(id == null){continue;}//從索引中獲取值String ngName = doc.get("ngName");String town = doc.get("town");String pianQu = doc.get("pianQu");String switchInType = doc.get("switchInType");String addressType = doc.get("addressType");String flag = doc.get("flag");String causes = doc.get("causes");String crtTime = doc.get("crtTime");//判斷是否為空if(StringUtils.isNotBlank(ngName)){hh.setNgName(ngName);}if(StringUtils.isNotBlank(town)){hh.setTown(town);}if(StringUtils.isNotBlank(pianQu)){hh.setPianQu(pianQu);}if(StringUtils.isNotBlank(switchInType)){hh.setSwitchInType(switchInType);}if(StringUtils.isNotBlank(addressType)){hh.setAddressType(addressType);}if(flag!=null ){hh.setFlag(Integer.parseInt(flag));}if(StringUtils.isNotBlank(causes)){hh.setCauses(causes);}if (StringUtils.isNotBlank(crtTime)) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");Date parse = sdf.parse(crtTime);hh.setCrtTime(parse);}// 獲取地址String name = doc.get("name");hh.setName(name);// 高亮String idHighlighter = highlighter.getBestFragment(analyzer, "id", id); // System.out.println("id(高亮):"+idHighlighter); // System.out.println(name);hh.setId(idHighlighter);list.add(hh);}System.out.println(stringBuilder.toString());// 關閉索引查看器indexReader.close();long end = System.currentTimeMillis();System.out.println("開始時間:" + end);long time = end - start;System.out.println("用時:" + time + "毫秒");return list;} catch (InvalidTokenOffsetsException e) {e.printStackTrace();} catch (java.text.ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}2 布爾搜索 package com.rbc.hbms.search.util.lucene;import java.io.File; import java.io.IOException; import java.io.StringReader; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.LinkedList; import java.util.List;import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.ParseException; 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.highlight.Highlighter; import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.SimpleFragmenter; import org.apache.lucene.search.highlight.SimpleHTMLEncoder; import org.apache.lucene.search.highlight.SimpleHTMLFormatter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version;import com.rbc.hbms.estateView.entity.HbmsHouse; import com.tds.framework.wsmanage.util.StringUtils;/*** 布爾搜索* Created by MoSon on 2017/7/5.*/ public class BooleanSearchQuery {public static void main(String[] args) throws IOException, ParseException {// List<LinkedHashMap<String, Object>> address =// getAddress("煲sjfdkla街道",20);// System.out.println(address);}/*** 獲取符合的地址* * @param address* 要查詢地址* @param number* @return* @throws IOException* @throws ParseException*/public static List<HbmsHouse> getAddress(String address, int number) throws IOException, ParseException {try {long start = System.currentTimeMillis();System.out.println("開始時間:" + start);// 定義索引目錄// Path path = FileSystems.getDefault().getPath("standardIndex");// Directory directory = FSDirectory.open(path);Directory directory = FSDirectory.open(new File("D:/EclipseWorkspace/zseboss/standardIndex"));// 定義索引查看器IndexReader indexReader = DirectoryReader.open(directory);// 定義搜索器IndexSearcher indexSearcher = new IndexSearcher(indexReader);// 搜索內容// 定義查詢字段/*** 進階 多關鍵字的布爾搜索*/// 定義Term集合List<Term> termList = new ArrayList<Term>();StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_47); // IKAnalyzer analyzer = new IKAnalyzer();// 使用IK分詞器// 獲取分詞結果List<String> analyseResult = getAnalyseResult(address, analyzer);for (String result : analyseResult) {termList.add(new Term("ngName", result));// System.out.println(result);}// 定義TermQuery集合List<TermQuery> termQueries = new ArrayList<TermQuery>();// 取出集合結果for (Term term : termList) {termQueries.add(new TermQuery(term));}// 布爾搜索BooleanQuery query = new BooleanQuery();List<BooleanClause> booleanClauses = new ArrayList<BooleanClause>();// 遍歷for (TermQuery termQuery : termQueries) {booleanClauses.add(new BooleanClause(termQuery, BooleanClause.Occur.SHOULD));}// BooleanQuery.Builder builder = new BooleanQuery.Builder();for (BooleanClause booleanClause : booleanClauses) {// builder.add(booleanClause);query.add(booleanClause);}// 檢索// BooleanQuery query = builder.build();/**定義高亮組件*/SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span style='color:red;'>", "</span>");// 構建Scorer,用于選取最佳切片QueryScorer scorer = new QueryScorer(query);// 實例化Highlighter組件Highlighter highlighter = new Highlighter(formatter, scorer);// 構建Fragmenter對象,用于文檔切片highlighter.setTextFragmenter(new SimpleFragmenter(100));highlighter.setEncoder(new SimpleHTMLEncoder());// 定義要獲取的數量// 命中前20條文檔TopDocs topDocs = indexSearcher.search(query, number);// 打印命中數System.out.println("命中數:" + topDocs.totalHits);// 取出文檔ScoreDoc[] scoreDocs = topDocs.scoreDocs;// 遍歷取出數據List<HbmsHouse> list = new LinkedList<HbmsHouse>();for (ScoreDoc scoreDoc : scoreDocs) {HbmsHouse hh = new HbmsHouse();float score = scoreDoc.score; // 相似度// System.out.println("相似度:"+ score);// 通過indexSearcher的doc方法取出文檔Document doc = indexSearcher.doc(scoreDoc.doc);// 獲取idString id = doc.get("id");if(id == null){continue;}String ngName = doc.get("ngName");String town = doc.get("town");String pianQu = doc.get("pianQu");String switchInType = doc.get("switchInType");String addressType = doc.get("addressType");String flag = doc.get("flag");String causes = doc.get("causes");String crtTime = doc.get("crtTime");// 高亮/* String idHighlighter = highlighter.getBestFragment(analyzer, "id", id);String ngNameHighlighter = highlighter.getBestFragment(analyzer, "ngName", ngName);String townHighlighter = highlighter.getBestFragment(analyzer, "town", town);String pianQuHighlighter = highlighter.getBestFragment(analyzer, "pianQu", pianQu);String switchInTypeHighlighter = highlighter.getBestFragment(analyzer, "switchInType", switchInType);String addressTypeHighlighter = highlighter.getBestFragment(analyzer, "addressType", addressType);String flagHighlighter = highlighter.getBestFragment(analyzer, "flag", flag);String causesHighlighter = highlighter.getBestFragment(analyzer, "causes", causes);String crtTimeHighlighter = highlighter.getBestFragment(analyzer, "crtTime", crtTime);*/String idHighlighter = null;String ngNameHighlighter = null;String townHighlighter = null;String pianQuHighlighter = null;String switchInTypeHighlighter = null;String addressTypeHighlighter = null;String flagHighlighter = null;String causesHighlighter = null;String crtTimeHighlighter = null;if(StringUtils.isNotBlank(id)){idHighlighter = highlighter.getBestFragment(analyzer, "id", id);}if(StringUtils.isNotBlank(ngName)){ngNameHighlighter = highlighter.getBestFragment(analyzer, "ngName", ngName);}if(StringUtils.isNotBlank(pianQu)){pianQuHighlighter = highlighter.getBestFragment(analyzer, "pianQu", pianQu);}if(StringUtils.isNotBlank(town)){townHighlighter = highlighter.getBestFragment(analyzer, "town", town);}if(StringUtils.isNotBlank(switchInType)){switchInTypeHighlighter = highlighter.getBestFragment(analyzer, "switchInType", switchInType);}if(StringUtils.isNotBlank(addressType)){addressTypeHighlighter = highlighter.getBestFragment(analyzer, "addressType", addressType);}if(StringUtils.isNotBlank(flag)){flagHighlighter = highlighter.getBestFragment(analyzer, "flag", flag);}if(StringUtils.isNotBlank(causes)){causesHighlighter = highlighter.getBestFragment(analyzer, "causes", causes);}if(StringUtils.isNotBlank(crtTime)){crtTimeHighlighter = highlighter.getBestFragment(analyzer, "crtTime", crtTime);}if(idHighlighter == null){hh.setId(id);}else{hh.setId(idHighlighter);}if(ngNameHighlighter == null){hh.setNgName(ngName);}else{hh.setNgName(ngNameHighlighter);}if(townHighlighter == null){hh.setTown(town);}else{hh.setTown(townHighlighter);}if(pianQuHighlighter == null){hh.setPianQu(pianQu);}else{hh.setPianQu(pianQuHighlighter);}if(switchInTypeHighlighter == null){hh.setSwitchInType(switchInType);}else{hh.setSwitchInType(switchInTypeHighlighter);}if(addressTypeHighlighter == null){hh.setAddressType(addressType);}else{hh.setAddressType(addressTypeHighlighter);}if(flagHighlighter == null){if(flag!= null){hh.setFlag(Integer.parseInt(flag));}}else{hh.setFlag(Integer.parseInt(flagHighlighter));}if(causesHighlighter == null){hh.setCauses(causes);}else{hh.setCauses(causesHighlighter);}if (StringUtils.isNotBlank(crtTime)) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");Date parse = sdf.parse(crtTime);hh.setCrtTime(parse);}list.add(hh);}// 關閉索引查看器indexReader.close();long end = System.currentTimeMillis();System.out.println("結束時間:" + end);long time = end - start;System.out.println("用時:" + time + "毫秒");return list;} catch (InvalidTokenOffsetsException e) {e.printStackTrace();} catch (java.text.ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/*** 獲取指定分詞器的分詞結果* * @param analyzeStr* 要分詞的字符串* @param analyzer* 分詞器* @return 分詞結果*/public static List<String> getAnalyseResult(String analyzeStr, Analyzer analyzer) {List<String> response = new ArrayList<String>();TokenStream tokenStream = null;try {// 返回適用于fieldName的TokenStream,標記讀者的內容。tokenStream = analyzer.tokenStream("name", new StringReader(analyzeStr));// 語匯單元對應的文本CharTermAttribute attr = tokenStream.addAttribute(CharTermAttribute.class);// 消費者在使用incrementToken()開始消費之前調用此方法。// 將此流重置為干凈狀態。 有狀態的實現必須實現這種方法,以便它們可以被重用,就像它們被創建的一樣。tokenStream.reset();// Consumers(即IndexWriter)使用此方法將流推送到下一個令牌。while (tokenStream.incrementToken()) {response.add(attr.toString());}} catch (IOException e) {e.printStackTrace();} finally {if (tokenStream != null) {try {tokenStream.close();} catch (IOException e) {e.printStackTrace();}}}return response;} }
3 多字段搜索 import java.io.File; import java.io.IOException; import java.io.StringReader; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set;import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.SimpleFragmenter; import org.apache.lucene.search.highlight.SimpleHTMLEncoder; import org.apache.lucene.search.highlight.SimpleHTMLFormatter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version;import com.rbc.hbms.estateView.entity.HbmsHouse; import com.tds.framework.wsmanage.util.StringUtils;/*** 多字段搜索* Created by MoSon on 2017/7/5.*/ public class MultiFieldQuery {public static List<HbmsHouse> getInfo(String[] fields,String keyword, int number, Map<String, String> map) throws IOException, ParseException {try {long start = System.currentTimeMillis();System.out.println("開始時間:" + start);Directory directory = FSDirectory.open(new File("D:/EclipseWorkspace/zseboss/standardIndex"));// 定義索引查看器IndexReader indexReader = DirectoryReader.open(directory);// 定義搜索器IndexSearcher indexSearcher = new IndexSearcher(indexReader);//定義搜索BooleanQuery query = new BooleanQuery();StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_47); // String keyword = "229632874 江南街道"; // String[] fields = new String[] { "ngName", "town", "pianQu" };BooleanClause.Occur[] flags = new BooleanClause.Occur[fields.length];/*for (int i = 0; i < fields.length; i++) {//如果是查詢“未錄入”就要必須有這個字段if(fields[i].equals("pianQu") || fields[i].equals("switchinType") || fields[i].equals("addressType") || fields[i].equals("flag")){for(Map.Entry<String, String> field : map.entrySet()){String key = field.getKey();if(key!=null){String value = field.getValue();Query query2 = new QueryParser(Version.LUCENE_47,key,analyzer).parse(value);query.add(query2, BooleanClause.Occur.MUST);}}}else{flags[i] = BooleanClause.Occur.SHOULD; }}Query query1 = MultiFieldQueryParser.parse(Version.LUCENE_47, keyword, fields, flags, analyzer);query.add(query1, BooleanClause.Occur.SHOULD);*/ // Query query2 = new QueryParser(Version.LUCENE_47,"作者",analyzer).parse("辰東");// Query query2 = new// QueryParser(Version.LUCENE_47,"name",analyzer).parse("江門");for(Map.Entry<String, String> field : map.entrySet()){String key = field.getKey();if(key!=null){String value = field.getValue();Query query2 = new QueryParser(Version.LUCENE_47,key,analyzer).parse(value);query.add(query2, BooleanClause.Occur.MUST);}}// BooleanQuery query = new BooleanQuery();// query.add(query2, BooleanClause.Occur.SHOULD);/**定義高亮組件*/SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span style='color:red;'>", "</span>");// 構建Scorer,用于選取最佳切片QueryScorer scorer = new QueryScorer(query);// 實例化Highlighter組件Highlighter highlighter = new Highlighter(formatter, scorer);// 構建Fragmenter對象,用于文檔切片highlighter.setTextFragmenter(new SimpleFragmenter(100));highlighter.setEncoder(new SimpleHTMLEncoder());// 命中的前10條文檔TopDocs topDocs = indexSearcher.search(query, 20);// 打印命中數System.out.println("命中數:" + topDocs.totalHits);// 取出文檔ScoreDoc[] scoreDocs = topDocs.scoreDocs;List<HbmsHouse> list = new LinkedList<HbmsHouse>();for (ScoreDoc scoreDoc : scoreDocs) {HbmsHouse hh = new HbmsHouse();// 通過indexSearcher的doc方法取出文檔Document doc = indexSearcher.doc(scoreDoc.doc);String id = doc.get("id");if (id == null) {continue;}String ngName = doc.get("ngName");String town = doc.get("town");String pianQu = doc.get("pianQu");String switchInType = doc.get("switchInType");String addressType = doc.get("addressType");String flag = doc.get("flag");String causes = doc.get("causes");String crtTime = doc.get("crtTime");String idHighlighter = null;String ngNameHighlighter = null;String townHighlighter = null;String pianQuHighlighter = null;String switchInTypeHighlighter = null;String addressTypeHighlighter = null;String flagHighlighter = null;String causesHighlighter = null;String crtTimeHighlighter = null;// 高亮if (StringUtils.isNotBlank(id)) {idHighlighter = highlighter.getBestFragment(analyzer, "id", id);}if (StringUtils.isNotBlank(ngName)) {ngNameHighlighter = highlighter.getBestFragment(analyzer, "ngName", ngName);}/* if(StringUtils.isNotBlank(pianQu)){pianQuHighlighter = highlighter.getBestFragment(analyzer, "pianQu", pianQu);}if(StringUtils.isNotBlank(town)){townHighlighter = highlighter.getBestFragment(analyzer, "town", town);}if(StringUtils.isNotBlank(switchInType)){switchInTypeHighlighter = highlighter.getBestFragment(analyzer, "switchInType", switchInType);}if(StringUtils.isNotBlank(addressType)){addressTypeHighlighter = highlighter.getBestFragment(analyzer, "addressType", addressType);}if(StringUtils.isNotBlank(flag)){flagHighlighter = highlighter.getBestFragment(analyzer, "flag", flag);}if(StringUtils.isNotBlank(causes)){causesHighlighter = highlighter.getBestFragment(analyzer, "causes", causes);}if(StringUtils.isNotBlank(crtTime)){crtTimeHighlighter = highlighter.getBestFragment(analyzer, "crtTime", crtTime);}*/if(idHighlighter == null){hh.setId(id);}else{hh.setId(idHighlighter);}String ngNameValue = map.get("ngName");if(ngNameHighlighter == null || ngNameValue == null){hh.setNgName(ngName);}else{hh.setNgName(ngNameHighlighter);}if(townHighlighter == null){hh.setTown(town);}else{//因為是代碼,不能用作高亮hh.setTown(townHighlighter);}if(pianQuHighlighter == null){hh.setPianQu(pianQu);}else{hh.setPianQu(pianQuHighlighter);}if(switchInTypeHighlighter == null){hh.setSwitchInType(switchInType);}else{hh.setSwitchInType(switchInTypeHighlighter);}if(addressTypeHighlighter == null){hh.setAddressType(addressType);}else{hh.setAddressType(addressTypeHighlighter);}if(flagHighlighter == null){if(flag!= null){hh.setFlag(Integer.parseInt(flag));}}else{hh.setFlag(Integer.parseInt(flagHighlighter));}if(causesHighlighter == null){hh.setCauses(causes);}else{hh.setCauses(causesHighlighter);}if (StringUtils.isNotBlank(crtTime)) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");Date parse = sdf.parse(crtTime);hh.setCrtTime(parse);}//添加到集合list.add(hh);}// 關閉索引查看器indexReader.close();long end = System.currentTimeMillis();System.out.println("開始時間:" + end);long time = end - start;System.out.println("用時:" + time + "毫秒");return list;} catch (java.text.ParseException e) {e.printStackTrace();} catch (InvalidTokenOffsetsException e) {e.printStackTrace();}return null;}
想看入門可以看底部的“我的更多文章”。
總結
以上是生活随笔為你收集整理的Lucene进阶操作,单字段、多字段和布尔搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS根据日期比较显示时分或者月日
- 下一篇: Activiti部署报错