Lucene 查询(Query)子类

QueryParser(单域查询)

QueryParser子类对单个域查询时创建查询query,构造方法中需要传入Lucene版本号,检索域名和分词器。

QueryParser parser = new QueryParser(Version.LUCENE_43, field, analyzer);// 查询字符串
Query query = parser.parse("key");

MultiFieldQueryParser(多域查询)

MultiFieldQueryParser parser2 = new MultiFieldQueryParser(Version.LUCENE_43, fields, analyzer);
Query query2 = parser2.parse(key);

TermQuery(单个关键字域查询)

TermQuery tq=new TermQuery(new Term(field, key));

PrefixQuery(前缀字符查询)

PrefixQuery只需要指定前缀若干个字符preStr,以preStr开始的都会被匹配,比如”Lu”可以匹配”Luke” ,”Lucene”.

 PrefixQuery prefixQuery=new PrefixQuery(new Term("field,key));

PhraseQuery(短语查询)

  PhraseQuery phraseQuery=new PhraseQuery();
  phraseQuery.setSlop(3);//关键词间距离
  phraseQuery.add(new Term(field, "key1"));//关键词1
  phraseQuery.add(new Term(field, "key2"));//关键词2

上面的查询实例可以匹配关键词key1和key2间距不超过3的文档,field为查询域。

WildcardQuery(通配符查询)

WildcardQuery wildcardQuery=new WildcardQuery(new Term(field, "基于?"));

?匹配1个字符,*匹配任意多个字符.

TermRangeQuery(字符串范围搜索)

TermRangeQuery rangeQuery=new TermRangeQuery(field, lowerTerm, upperTerm, includeLower, includeUpper);

五个参数分别为域名、域的下限值、域的上限值、是否包含下限、是否包含上限。比如:

TermRangeQuery rangeQuery=new TermRangeQuery(field, "aab", "azz", true, false);

NumericRangeQuery(数字范围搜索)

Query q = NumericRangeQuery.newFloatRange("weight", 0.03f, 0.10f, true, true);

matches all documents whose float valued “weight” field ranges from 0.03 to 0.10, inclusive.

BooleanQuery(布尔查询)

多个query对象组合成一个对象

BooleanQuery bQuery=new BooleanQuery();
            bQuery.add(new TermQuery(new Term("title", "lucene")), Occur.MUST);
            bQuery.add(new TermQuery(new Term("content", "基于")), Occur.SHOULD);
            bQuery.add(new TermQuery(new Term("name", "java")), Occur.MUST_NOT);

上面的例子用于查询title中一定包含”lucene”(and)或者cotent包含”基于”(or)但name中一定不含” java”(not)的文档。

时间: 2024-10-13 19:57:39

Lucene 查询(Query)子类的相关文章

lucene 查询的使用

各种查询 方式一:使用QueryParser与查询语法.(会使用分词器) MultiFieldQueryParser 查询字符串 ------------------------> Query对象 例如: 上海 AND 天气 上海 OR 天气 上海新闻 AND site:news.163.com ... 方式二: 直接创建Query的实例(子类的),不会使用分词器 new TermQuery(..); new BooleanQuery(..); 1 package cn.itcast.i_que

Lucene学习:lucene查询

1.1. Lucene查询 在学习Lucene的查询方法前,先了解一下下面几个类: 1.1.1. Query 封装某种查询类型的具体子类,配置查询的查询条件.Query实例将被传递给IndexSearcher的search方法.下面是常用的Query子类: l 通过项进行搜索 TermQuery类 l 在指定的项范围内搜索 TermRangeQuery类 l 通过字符串搜索 PrefixQuery类 l 组合查询 BooleanQuery类 l 通过短语搜索 PhraseQuery类 l 通配符

Lucene 查询分页技术

常用的Lucene查询代码如下所示,该代码的作用是将path路径下的所有索引信息返回 1 public String matchAll(String path) { 2 try { 3 Directory directory = FSDirectory.open(new File(path)); 4 DirectoryReader reader = DirectoryReader.open(directory); 5 IndexSearcher searcher = new IndexSearc

Lucene查询结果高亮

检索结果高亮对于用户的体验度和友好度非常重要,可以快速标记出用户检索对关键词.本例中的索引仍使用上一篇博客(Lucene查询索引)中创建的索引,代码高亮参考了Lucene4.x高亮 fast高亮 前端高亮. 实现效果: 核心代码 package ucas.ir.lucene; import java.io.File; import java.io.IOException; import javax.print.Doc; import org.apache.lucene.analysis.Anal

Lucene查询索引

索引创建 以新闻文档为例,每条新闻是一个document,新闻有news_id.news_title.news_source.news_url.news_abstract.news_keywords这6个域,添加两个news document到索引中,下面再贴一下创建索引的代码: package ucas.ir.lucene; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.An

Lucene查询方式总结

-------------------------------------------------- IndexReader的设计 -------------------------------------------------- IndexReader的创建需要消耗大量内存空间, 所以通过将IndexReader设计出属性值,进行一次创建 整个项目周期就只有一个IndexReader 1.// IndexReader的设计 private static IndexReader reader

Lucene查询条数限制

运用Lucene进行索引,在查询的时候是有条数限制的 1 public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort); 可以看到第三个参数是int类型,所以返回的条数为int最大值.因为Lucene为索引查询,所以不需要返回全部的数据,根据关键词返回匹配的数据,按照分值排序,int大小的数据足够筛选出匹配的正确数据.在运用Lucene查询的是否不易返回过多条数,这样会影响性能,一般1000条左右

【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象

对于一个搜索而言,其核心语句为: searcher.search(query, 10); 此时,其最重要的参数为一个Qeury对象.构造一个Query对象有2种方法:[均以在contents域搜索java关键词为例] (1)使用Query的子类,如BooleanQuery, ConstantScoreQuery, DisjunctionMaxQuery, FilteredQuery, MatchAllDocsQuery, MultiPhraseQuery, MultiTermQuery, Phr

Lucene查询并高亮显示

1.导入jar包 2.创建实体Bean package com.zhishang.lucene; /**  * Created by Administrator on 2017/7/8.  */ public class HtmlBean {     private String title;     private String content;     private String url;     public void setTitle(String title) {         t