`

lucene整理4 -- 各种Query

阅读更多
1.    各种Query
1.1. 概述
query.toString()查看原子查询

1.2. 使用特定的分析器搜索
IndexSearcher searcher = new IndexSearcher(path );

Hits hits = null;

Query query = null;

QueryParser parser =new QueryParser("contents", new StandardAnalyzer());

query =parser.parse("11 a and hello");

hits=searcher.search(query); //查找 name:11 name:hello 共1个结果

System.out.println("查找 "+query.toString()+" 共" + hits.length() + "个结果");

1.3. 按词条搜索—TermQuery
Query query = null;

query=new TermQuery(new Term("name","word1 a and"));

hits=searcher.search(query);// 查找 name:word1 a and 共0个结果

System.out.println("查找 "+query.toString()+" 共" + hits.length() + "个结果");

1.4. 按“与或”搜索—BooleanQuery
1.和: MUST与MUST_NOT 

2.或: SHOULD与SHOULD

3.A与B的并集-B  MUST与MUST_NOT

Query query1=null;

Query query2=null;

BooleanQuery query=null;

query1=new TermQuery(new Term("name","word1"));

query2=new TermQuery(new Term("name","word2"));

query=new BooleanQuery();

query.add(query1,BooleanClause.Occur.MUST);

query.add(query2,BooleanClause.Occur.MUST_NOT);

1.5. 在某一范围内搜索—RangeQuery
Term beginTime=new Term("time","200001");

Term endTime=new Term("time","200005");

RangeQuery query=null;

query=new RangeQuery(beginTime,endTime,false);//不包含边界值

1.6. 使用前缀搜索—PrefixQuery
Term pre1=new Term("name","wor");

PrefixQuery query=null;

query = new PrefixQuery(pre1);

1.7. 短语搜索—PhraseQuery
a)默认坡度为0

PhraseQuery query = new PhraseQuery();

query.add(new Term(“bookname”,”钢”));

query.add(new Term(“bookname”,”铁”));

Hits hits=searcher.search(query); //搜索“钢铁”短语,而非“钢”和“铁”

b)设置坡度,默认为0

PhraseQuery query = new PhraseQuery();

query.add(new Term(“bookname”,”钢”));

query.add(new Term(“bookname”,”铁”));

query.setSlop(1);

Hits hits=searcher.search(query);//搜索“钢铁”或“钢*铁”中含一字

1.8. 多短语搜索—MultiPhraseQuery
a)

MultiPhraseQuery query=new MultiPhraseQuery();

//首先向其中加入要查找的短语的前缀

query.add(new Term(“bookname”,”钢”));

//构建3个Term,作为短语的后缀

Term t1=new Term(“bookname”,”铁”);

Term t2=new Term(“bookname”,”和”);

Term t3=new Term(“bookname”,”要”);

//再向query中加入所有的后缀,与前缀一起,它们将组成3个短语

query.add(new Term[]{t1,t2,t3});

Hits hits=searcher.search(query);

for(int i=0;i<hits.length();i++)

    System.out.println(hits.doc(i));

b)

MultiPhraseQuery query=new MultiPhraseQuery();

Term t1=new Term(“bookname”,”钢”);

Term t2 = new Term(“bookname”,”和”);

query.add(new Term[]{t1,t2});

query.add(new Term(“bookname”,”铁”));

c)

MultiPhraseQuery query=new MultiPhraseQuery();

Term t1=new Term(“bookname”,”钢”);

Term t2 = new Term(“bookname”,”和”);

query.add(new Term[]{t1,t2});

query.add(new Term(“bookname”,”铁”));

Term t3=new Term(“bookname”,”是”);

Term t4=new Term(“bookname”,”战”);

query.add(new Term[]{t3,t4});

1.9. 模糊搜索—FuzzyQuery
使用的算法为levenshtein算法,在比较两个字符串时,将动作分为3种:

l         加一个字母

l         删一个字母

l         改变一个字母

FuzzyQuery query=new FuzzyQuery(new Term(“content”,”work”));

 

public FuzzyQuery(Term term)

public FuzzyQuery(Term term,float minimumSimilarity)throws IllegalArgumentException

public FuzzyQuery(Term term,float minimumSimilarity,int prefixLength)throws IllegalArgumentException

其中minimumSimilarity为最小相似度,越小则文档的数量越多。默认为0.5.其值必须<1.0

FuzzyQuery query=new FuzzyQuery(new Term(“content”,”work”),0.1f);

其中prefixLength表示要有多少个前缀字母必须完全匹配

FuzzyQuery query=new FuzzyQuery(new Term(“content”,”work”),0.1f,1);

1.10.            通配符搜索—WildcardQuery
* 表示0到多个字符

? 表示一个单一的字符

WildcardQuery query=new WildcardQuery(new Term(“content”,”?qq*”));

1.11.            跨度搜索
1.11.1.      SpanTermQuery
效果和TermQuery相同

SpanTermQuery query=new SpanTermQuery(new Term(“content”,”abc”));

1.11.2.      SpanFirstQuery
从Field内容的起始位置开始,在一个固定的宽度内查找所指定的词条

SpanFirstQuery query=new SpanFirstQuery(new Term(“content”,”abc”),3);//是第3个word,不是byte

1.11.3.      SpanNearQuery
SpanNearQuery相当与PhaseQuery

SpanTermQuery people=new SpanTermQuery(new Term(“content”,”mary”));

SpanTermQuery how=new SpanTermQuery(new Term(“content”,”poor”));

SpanNearQuery query=new SpanNearQuery(new SpanQuery[]{people,how},3,false);

1.11.4.      SpanOrQuery
把所有SpanQuery的结果合起来

SpanTermQuery s1=new SpanTermQuery(new Term(“content”,”aa”);

SpanTermQuery s2=new SpanTermQuery(new Term(“content”,”cc”);

SpanTermQuery s3=new SpanTermQuery(new Term(“content”,”gg”);

SpanTermQuery s4=new SpanTermQuery(new Term(“content”,”kk”);

SpanNearQuery query1=new SpanNearQuery(new SpanQuery[]{s1,s2},1,false);

SpanNearQuery query2=new SpanNearQuery(new SpanQuery[]{s3,s4},3,false);

SpanOrQuery query=new SpanOrQuery(new SpanQuery[]{query1,query2});

1.11.5.      SpanNotQuery
从第1个SpanQuery的查询结果中,去掉第2个SpanQuery的查询结果

SpanTermQuery s1=new SpanTermQuery(new Term(“content”,”aa”);

SpanFirstQuery query1=new SpanFirstQuery(s1,3);

 

SpanTermQuery s3=new SpanTermQuery(new Term(“content”,”gg”);

SpanTermQuery s4=new SpanTermQuery(new Term(“content”,”kk”);

SpanNearQuery query2=new SpanNearQuery(new SpanQuery[]{s3,s4},4,false);

 

SpanNotQuery query=new SpanNotQuery(query1,query2);
1.12.            RegexQuery—正则表达式的查询
String regex="http://[a-z]{1,3}\\.abc\\.com/.*";

       RegexQuery query=new RegexQuery(new Term("url",regex));

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoping8411/archive/2010/03/24/5413757.aspx
分享到:
评论

相关推荐

    自己整理的 最新的 lucene-3.0.1_api

    《全面解析:Lucene-3.0.1 API——基于最新整理资料》 在信息技术日新月异的今天,搜索引擎技术扮演着至关重要的角色。Apache Lucene,作为一款开源的全文检索库,为开发者提供了强大的文本搜索功能。本文将基于...

    整理Lucene.net一些简单属性说明

    标题:“整理Lucene.net一些简单属性说明” 在信息技术领域,搜索引擎是不可或缺的一部分,而Lucene.net作为Apache Lucene的.NET版本,为开发者提供了一套强大的全文搜索功能。这个文档将对Lucene.net的一些核心...

    Lucene中文分词组件 JE-Analysis 1.4.0

    import org.apache.lucene.search.Query; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; public class Segment { public static void main(String[] args) ...

    jsuop+lucene demo

    4. **查询执行**:用户输入查询后,Lucene的QueryParser会解析查询字符串,生成Query对象。然后,使用IndexSearcher进行搜索,返回匹配的文档。 **三、集成与应用** 1. **JSUOP与Lucene的接口**:在"jsuop+lucene ...

    有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题[整理].pdf

    Lucene 是一个强大的全文搜索引擎库,它允许开发者创建高效的索引和检索机制。在构建实时索引时,尤其是在处理文档的更新和删除时,需要理解Lucene提供的不同方法以及它们的适用场景。以下是对Lucene删除文档和更新...

    Lucene全文检索引擎工具包 v7.7.3-源码.zip

    4. 查询解析器(QueryParser):它负责将用户的查询字符串转换为Lucene能理解的Query对象。Query对象包含了查询的逻辑结构,如布尔运算符、短语查询等。 5. 搜索器(Searcher):Searcher用于执行查询和返回结果。...

    Luncene学习资料

    【Lucene 排序】在Lucene中,排序是通过实现`Sort`类或使用`SortField`对象来完成的。排序不仅可以基于文档的分数(即查询的相关性),还可以基于文档的字段值。例如,你可以根据文档的创建日期、作者名或其他自定义...

    我整理的搜索引擎学习和开发相关资料

    本文将深入探讨标题“我整理的搜索引擎学习和开发相关资料”中涉及的知识点,并结合描述及压缩包内的文件,提供一个全面的搜索引擎技术概述。 一、搜索引擎原理 "搜索引擎原理"这一主题涵盖了搜索引擎的基本工作...

    es快速入门笔记,自我整理,共75节

    本资源摘要信息是基于Elasticsearch快速入门笔记的整理,共75节,涵盖了Elasticsearch的核心概念、功能、适用场景、特点、安装、启动、使用案例等 contenu。以下是本资源摘要信息的详细知识点: 一、Elasticsearch...

    elasticsearch数据库下载、配置、使用案例

    Elasticsearch 是一款基于 Lucene 开发的分布式、RESTful 搜索和分析引擎,广泛应用于全文检索、日志和实时数据分析领域。它以其高性能、高可扩展性和易于集成的特点而受到开发者的青睐。本文将详细介绍如何下载、...

    ElasticSearch Java API 中文文档

    ElasticSearch是一个基于Lucene构建的开源搜索引擎,它提供了一个分布式、多用户能力的全文搜索引擎,基于RESTful web接口。ElasticSearch通过Java API的封装,使得开发者能够更容易地使用Java语言与ElasticSearch...

    书籍搜索引擎需求1

    Elasticsearch 是一个基于 Lucene 的搜索引擎,提供了强大的搜索功能和数据分析能力。Django 是一个基于 Python 的高级 Web 应用框架,提供了灵活的开发环境和强大的 ORM 系统。  搜索引擎需求  书籍搜索引擎...

Global site tag (gtag.js) - Google Analytics