• Lucene之拉框查询


    使用lucene做拉框查询  最简单不过了 直接看代码:

    private List<Document> spatialQuery0(String keyword,double minx,double miny,double maxx,double maxy){
    		List<Document>  lst=new ArrayList<Document>();
    		try{
    		File f=new File(heath_index_path);
    		if(!f.exists()){
    			f.mkdirs();
    		}
    		Directory d=FSDirectory.open(f);
    		Analyzer a=new IKAnalyzer();
    		
    		IndexSearcher searcher=new IndexSearcher(d, true);
    		BooleanQuery query=new BooleanQuery();
    //		xx   关键字
    		Query word=new QueryParser(Version.LUCENE_30, "comp_name", a).parse(keyword);
    		
    		//x  经度
    //		NumericRangeQuery  t1=ne//new NumericRangeQuery("x", "80.0", "120.0", true, true);
    		NumericRangeQuery<Double> lon=NumericRangeQuery.newDoubleRange("x", 8, minx, maxx, true, true);//new NumericRangeQuery<Double>("y",8,32,new Double(80.0),new Double(120.0),true,true);
    //		NumericRangeQuery<Number>
    		//y  维度 
    		NumericRangeQuery<Double>  lat=NumericRangeQuery.newDoubleRange("y", 8, miny, maxy, true, true);//new TermRangeQuery("y", "10.0", "40.0", true, true);
    		query.add(word,Occur.MUST);
    		query.add(lon, Occur.MUST);
    		query.add(lat, Occur.MUST);
    		//query result
    		TopDocs docs=searcher.search(query, Integer.MAX_VALUE);
    //		docs.
    //		TopDocsCollector<ScoreDoc>
    		//查询所有记录
    		for(int i=0;i<docs.totalHits;i++){
    			Document doc=searcher.doc(docs.scoreDocs[i].doc);
    //			System.out.println(doc.get("comp_name"));
    			lst.add(doc);
    		}
    		searcher.close();
    		d.close();
    		}catch(Exception e){
    			System.out.println("查询失败:"+e.toString());
    		}
    		return lst;
    	}
    

     经纬度范围表达 使用NumericRangeQuery 。中文分词使用IKAnalyzer来搞定。

  • 相关阅读:
    oozie的简易安装
    flume监控一个linux指定的一个文件夹的文件信息
    FastDFS图片服务器java后台的简单调用
    java对象与json互转
    final关键字详解
    文件压缩和解压缩工具类
    web上下文监听器ServletContextListener
    基本类型的相互转换
    用java代码在创建hbase表时指定region的范围
    String类的一些常用操作方法
  • 原文地址:https://www.cnblogs.com/likehua/p/2730192.html
Copyright © 2020-2023  润新知