`

lucene3.6.0的查询条件分析

 
阅读更多

 

// TermQuery:词条查询。通过对某个词条的指定,实现检索索引中存在该词条的所有文档。  

  Query query = new TermQuery(New Term("content","java")),区分大小写  

            // TermRangeQuery:范围查询。这种范围可以是日期,时间,数字,大小等等。可以使用"context:[a to b]"(包含边界)或者"content:{a to b}"(不包含边界) 查询表达式  

 

            // PrefixQuery:前缀查询。  可以使用"content:lua*"表达式

            // BooleanQuery:布尔查询。Lucene中包含逻辑关系:“与”,“或”,“非”的复杂查询,最终都会表示成BooleanQuery。布尔查询就是一个由多个子句和子句之间组成的布尔逻辑所组成的查询。    可以通过BooleanQuery.java类的public void add(Query query, BooleanClause.Occur occur) 方法来增加一个查询子句。子句最大数量默认为1024。

查询表达式可以通过“+”,“-”,“AND”,“OR”,“NOT”来组合。比如“+content:"abc" -title:"xyz"”

        // PhraseQuery:短语查询。默认为完全匹配,但可以指定坡度(Slop,默认为0)改变范围。比如Slop=1,检索短语为“电台”,那么在“电台”中间有一个字的也可以被查找出来,比如“电视台”。  查询表达式可以为“电 台 ~1”

            // MultiPhraseQuery:多短语查询。  

            // FuzzyQuery:类似项查询,模糊查询。模糊查询使用的匹配算法是levensh-itein算法。此算法在比较两个字符串时,将动作分为3种:加一个字母(Insert),删一个字母(Delete),改变一个字母(Substitute)。  编辑距离能够影响结果的得分,编辑距离越小得分越高.查询表达式为"fuzzy~",使用~来表示模糊查询.

            // WildcardQuery:通配符查询。“*”号表示0到多个字符,“?”表示单个字符。 最好不要用通配符为首,否则会遍历所有索引项 

            // SpanQuery:跨度查询。此类为抽象类。  

            // SpanTermQuery:检索效果完全同TermQuery,但内部会记录一些位置信息,供SpanQuery的其它API使用,是其它属于SpanQuery的Query的基础。  

            // SpanFirstQuery:查找方式为从Field的内容起始位置开始,在一个固定的宽度内查找所指定的词条。  

            // SpanNearQuery:功能类似PharaseQuery。SpanNearQuery查找所匹配的不一定是短语,还有可能是另一个SpanQuery的查询结果作为整体考虑,进行嵌套查询。  

            // SpanOrQuery:把所有SpanQuery查询结果综合起来,作为检索结果。  

            // SpanNotQuery:从第一个SpanQuery查询结果中,去掉第二个SpanQuery查询结果,作为检索结果。 

 

Query的toString()方法可以查看最终的查询表达式:

 QueryParser parser = new QueryParser(Version.LUCENE_CURRENT,"context", new StandardAnalyzer(Version.LUCENE_CURRENT););

            Query query = parser.parse("旧水泥袋");

输出:

context:旧 context:水 context:泥 context:袋

 

不能只有NOT表达式,必须跟AND,OR等其他表达式一起使用.

 

        //QueryParser parser = new QueryParser(version, "content", analyzer);//默认在content域中查找  

        QueryParser parser = new MyQueryParser(version, "content", analyzer);//默认在content域中查找, 重写了getRangeQuery方法, 可以进行数字范围查询  

        Query query = null;   

 

        //查找content(默认域)中存在软件的结果  

        query = parser.parse("软件");  

 

        //查找name域中有java的结果  

        query = parser.parse("name:java");  

 

        //使用通配符  

        query = parser.parse("name: j*");//默认*号不能出现在最前端, 会影响效率, 使用parser.setAllowLeadingWildcard(true)打开  

        query = parser.parse("lu*n?");//只能在单个分词中使用通配符, 即 使用 “lucene*action”就匹配不到  

        query = parser.parse("lucene test");//默认lucene和action是或关系  

        query = parser.parse("lucene OR test");//同上, OR必须大写  

        query = parser.parse("lucene AND test");//与关系  

        query = parser.parse("- lucene + test");//存在test但不存在lucene  

        //query = parser.parse("size:[100 TO 200]");//这个query是TermRangeQuery所以不能用于数字(日期)范围查询  

        query = parser.parse("name:[java TO java]");//查找有a-z字母的    {}不包含  

        //数字范围查询需要重写QueryParser的getRangeQuery方法  

        query = parser.parse("date:[1334550379955 TO 1334550379955]");  

        query = parser.parse("\"lucene action\"~1");//1即phraseQuery中的slop=1  

        query = parser.parse("name:xava~0.74");//加上~代表模糊查询, 要和上面的额短语查询相区别开来,另外~后面可以加一个浮点数去顶相似度  

        //查询大小在145到150, 名称与javv相似, 创建时间在1334550379955之前的 不要, lucene与action相距1  

        query = parser.parse("size:[145 TO 150] + name:javv~ - date:[1 TO 1334550379954] + \"lucene action\"~1");  

 

 

对查询项进行加权:可以通过在查询项加上^factor对某个查询项进行加权,比如"title^2.0 junit" 对title的查询加权为2.0,而junit还是默认1.0

分享到:
评论

相关推荐

    lucene-3.6.0.zip

    lucene-3.6.0.zip

    lucene-3.6.0

    开源项目lucene-3.6.0 官网上下下来的源码

    lucene 3.6.0 源代码

    lucene-core-3.6.0-sources 绝对可用

    lucene-3.6.0 api 手册

    lucene-3.6.0 api 手册, 最新的 , lucene 是个好东东, 一直在用, 之前还在使用3.1的,发现已经到3.6了, 落后啊

    lucene-core-3.6.0.jar

    lucene-core-3.6.0.jar,很好,很实用的一个包

    IK和Lucene

    IKAnalyzer所有的Jar包以及lucene3.6.0和lucene5.0.0相关的jar包,IKAnalyzer2012兼容lucene3.6.0,IKAnalyzer兼容lucene有限

    lucene-core-3.6.0.jar.zip

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎...

    lucene-highlighter-3.6.0-sources

    lucene-highlighter-3.6.0-sources

    mmseg4j-1.8.5

    详细说明:mmseg 1.8.5的测试分词项目包 和lucene 3.6.0 相配合使用-corresponding test points words mmseg project package and lucene 3.6.0

    IKAnalyzer2012_u6和lucene-core-3.6.0

    IKAnalyzer2012_u6和lucene-core-3.6.0两个jar包,互相兼容。ik分词的使用方法可以转https://blog.csdn.net/fr961951149/article/details/98736002。

    lucene3.6.1 所需jar整合包

    lucene3.6.1 所需jar整合包里面包括 lucene-highlighter-3.6.1.jar lucene-core-3.6.0.jar lucene-analyzers-3.6.1.jar IKAnalyzer2012_u6.jar

    lucene-3.6.2.zip

    如果还是使用3.6.0或3.6.1,更要升级到该版本,因为该版本修复了部分以前版本的BUG。下面列出几个常用到的包:lucene-core-3.6.2.jar、lucene-memory-3.6.2.jar、lucene-highlighter-3.6.2.jar、lucene-analyzers-...

    lucene-core-3.6.2.jar

    3.6.2版本是lucene的3x中最大的版本,也是3...如果还是使用3.6.0或3.6.1,更要升级到该版本,因为该版本修复了部分以前版本的BUG。想下载源码包的,可以搜索源码包lucene-core-3.6.2-src.jar及lucene-queries-3.6.2.jar

    lucene-core-3.6.2-src.jar

    3.6.2版本是lucene的3x中最大的版本,也是3x中最稳定的版本,...如果还是使用3.6.0或3.6.1,更要升级到该版本,因为该版本修复了以前版本BUG。还可搜索lucene-queries-3.6.2.jar及其源码包lucene-queries-3.6.2-src.jar

    lucene-queries-3.6.2.jar

    3.6.2版本是lucene的3x中最大的版本,也是3x中最稳定的版本,因此建设使用该版本。如果还是使用3.6.0或3.6.1,更要升级到该版本,因为该版本修复了部分以前版本的BUG。高级搜索jar包

    lucene-queries-3.6.2-src.jar

    高级搜索源码包,还可搜索lucene-queries-3.6.2.jar及lucene-core-3.6.2.jar。3.6.2版本是lucene的3x中最大的版本,也是3x中最稳定...如果还是使用3.6.0或3.6.1,更要升级到该版本,因为该版本修复了前两个版本的bug。

    IKanalyzer2012修复与Lucene3.6.2Jar及IK使用示例

    修复IKAnalyzer2012存在的无法添加扩展的中文停用词的bug。详见:http://blog.csdn.net/kmguo/article/details/8779522

    IKAnalyzer2012+lucene中文分词

    IKAnalyzer2012+lucene-core-3.6.0中文分词,由于兼容性问题,自己只调试通了这俩包

    IKAnalyzer2012(min)

    IKAnalyzer2012(Java分词工具)...网上示例用的是lucene-core-3.6.0.jar,用lucene-core-5.5.4.jar也可以。 本资源包含: IKAnalyzer2012_FF_hf1.jar IKAnalyzer.cfg.xml ext.dic stopword.dic lucene-core-5.5.4.jar

    poi3.16等一系列jar包

    内含:commons-collections4-4.1.jar、commons-logging-1.2.jar、freemarker.jar、IKAnalyzer2012.jar、lucene-core-3.6.0.jar、poi-3.16.jar、poi-ooxml-3.16.jar、poi-scratchpad-3.16.jar、xmlbeans-2.6.0.jar

Global site tag (gtag.js) - Google Analytics