上一篇文章是入门,现在是进阶,通过项目用到的例子给大家呈现较好的方法。本方法基于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进阶操作,单字段、多字段和布尔搜索相关推荐

  1. 字段和字段的参数,查询的13个方法,但标的双下划线外键和多对多操作

    字段 常用字段  AutoField() 自增列,必须填入参数 primary_key=True则成为数据库的主键.无该字段时,django自动创建 一个model不能有两个AutoField字段. ...

  2. 用lucene实现在一个(或者多个)字段中查找多个关键字

    最近跟着师兄们做个项目,我的任务就是负责做个"全文检索"的小模块.用到了Lucene的索引,下面的是其中的用Lucene实现在索引的一个字段(比如文章内容字段)进行查找多个关键字的 ...

  3. 泛微oa流程表单之明细表字段通过文本输入内容使另外一个字段必填

    //明细表字段通过文本输入内容使另外一个字段必填 jQuery("#detailDiv_0").delegate("input[id^='field10247_']&qu ...

  4. mybatis 操作动态表+动态字段+存储过程

    mybatis 操作动态表+动态字段+存储过程 存储过程   statementType="CALLABLE" <!-- 计算金额存储过程-->     <upd ...

  5. 关于驰骋表单引擎中字段扩展设置对文本框Pop窗体返回值的升级说明 2012/11/13...

    为什么80%的码农都做不了架构师?>>>    关于驰骋表单引擎中字段扩展设置对文本框Pop窗体返回值的升级说明 2012/11/13 现有功能: 以前版本仅支持自己定义url,返回 ...

  6. arcgis渔网分割提取栅格图_【操作】ArcGIS中字段的合并、分割、提取

    由于种种原因,可能涉及到要对ArcGIS属性字段进行合并.分割.提取等操作,我们可以在Excel中进行运算,然后连接到ArcGIS中,这里主要介绍下通过属性表字段计算器的操作方法. 目标 ① 合并&q ...

  7. finereport字段显示设置_QA | 表单如何设置字段显示逻辑?

    Hi,大家好!表姐又来给大家答疑解惑啦!这一期的Q&A我们来聊聊表单如何设置字段显示逻辑. 字段显示逻辑是什么? 字段显示逻辑是指根据设定字段条件,显示或隐藏特定的字段,可以实现选择不同内容, ...

  8. 在Migration中操作新添加的字段

    在Migration中操作新添加的字段 By YUANYI | Published: MAY 22, 2008 在有些情况下,我们需要在某个migration中对新增加的字段进行操作,比如下面这个将n ...

  9. php mysql ajax 单表多字段多关键词查询

    单表多字段查询在一些稍微复杂一点的查询中十分有用.本文主要利用MySQL数据库中的concat函数实现单表多字段多关键词查询.并且显示查询结果的表格可根据所选数据表动态生成. html代码 <! ...

最新文章

  1. 『原创』用C++开发WM应用系列(6)——深化ListBox控件
  2. linux下mysql的root密码忘记解决方案
  3. python3 time模块与datetime模块
  4. Mac终端显示 bogon的问题
  5. decode and nvl and sign
  6. xml方式实现aop-通知的种类
  7. java bom json,JSON字符串带BOM头ufeff
  8. OpenShift 4 - 用Quay扫描OpenShift用到的镜像
  9. 有源带阻和无源带阻的区别_一文看懂AOC有源光缆与DAC高速线缆的差异
  10. 测试员35岁以后找不到工作?问完了几千人后,我们得到了答案......
  11. AS3.0文档类:FLASH右键菜单文档类
  12. 【电力负荷预测】基于matlab GUI粒子群优化支持向量机短期电力负荷预测【含Matlab源码 751期】
  13. 电信提供的路由器无法进入配置地址或者配置后找不到自己WIFI的解决方法
  14. louvain算法python_【转载】LOUVAIN算法
  15. c# 串口 多线程_远距离无线串口模块手持平板电脑价格多少钱
  16. 海贼王游戏--EM游戏03--初出茅庐
  17. 电商项目:畅购商城4.0
  18. 40款免费开源游戏下载
  19. 自建服务器和购买云服务器的过程总结
  20. JS面试题汇总(八)

热门文章

  1. 《研磨设计模式》chap17 策略模式(1) 简介
  2. 机器学习(二)——鸢尾花案例
  3. 【Python Turtle合集】”外面的花已经开得很像样了, 我看到风拥作一团, 前来庆贺“(春天来啦~)
  4. django_rest_framework之解析器、渲染器
  5. 02-CA/TA编程:aes demo
  6. 图片爬取数据解析数据持久化
  7. 冒泡排序选择排序插入排序
  8. 2020-11-12(JNI开发常见错误)
  9. 【CTF大赛】第五届XMan选拔赛 ezCM Writeup
  10. 7、调用存储过程和函数