`
nj_link
  • 浏览: 10271 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

lucene查询分析器语法

阅读更多
Terms
Single Terms:
new Term("key",keyword);

Phrases:
PhraseQuery query = new PhraseQuery();
String[] words = sentence.split(" ");
for (String word : words) {
    query.add(new Term("contents", word));
}
booleanQuery.add(query, BooleanClause.Occur.MUST)

Operator
Key:AND OR BETWEEN TO NOT ()(表示分组) +(前缀标识MUST的意思)
4.9+代码:
String searchString = "(name:cc OR title:aa) AND text:bb";
QueryParser queryParser = new QueryParser(whichField, new StandardAnalyzer());
Query query = queryParser.parse(searchString);

4.7.0代码:
/**
     * 根据查询条件创建Query对象
     * @fields queries中“:”之前的field字段
     * @param queries 查询条件语句
     * @return
     * @throws Exception
     */
    private Query createQuery(String[] fields, String queries) throws Exception {
    	QueryParser queryParser = new MultiFieldQueryParser(version, fields, new StandardAnalyzer(version));  
    	Query query = queryParser.parse(queries);  
		return query;
    }

Wildcard
Key:* ?
String searchString = "te?t";
QueryParser queryParser = new QueryParser(whichField, new StandardAnalyzer());
Query query = queryParser.parse(searchString);


Fuzzy Searches
Key:~
roam~ 匹配单词:form 和 roams.这中文估计不大一样
roam~0.8 0.8表示相似度。相似度0.8以及以上就可以查出结果
"jakarta apache"~10 表示2个单词距离为10以内就可以查出结果
用法和上面一样


Boosting a Term
Key:^
roam^4 keyword 表示因子为4,越大越重要。跟查询结果排序有关。

Escaping Special Characters

特殊字符:+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ 用"\"转义

有用的一些函数:
时间类型可以用DateTools转为String建立索引,查询的时候可以用datetime:[xx TO xx]
Date date = DateUtils.parseDate(value, "yyyy-MM-dd");
value = DateTools.dateToString(date, DateTools.Resolution.DAY);
doc.add(new StringField(name, value, Store.YES));

float , int , long 类型使用以下方式建立索引,查询的时候可以用number:[1.11 TO 2.11]。复合查询时用NumericRangeQuery
float flValue = Float.parseFloat(value);
type.setNumericType(NumericType.FLOAT);
doc.add(new FloatField(name, flValue, type));

根据查询字符串产生query
    /**
     * 根据查询条件创建Query对象
     * @fields queries中“:”之前的field字段
     * @param queries 查询条件语句
     * @return
     * @throws Exception
     */
    private Query createQuery(String[] fields, String queries) throws Exception {
    	QueryParser queryParser = new MultiFieldQueryParser(version, fields, new StandardAnalyzer(version));  
    	Query query = queryParser.parse(queries);  
		return query;
    }

复合查询
String[] fields = new String[]{"packageName","className","date"};
Date d1 = fmt.parse("2013-01-00");
Date d2 = fmt.parse("2014-01-02");
String s = "["+d1.getTime()+" TO "+d2.getTime()+"]";
//字符串和时间合并查询
String queries = new String("packageName:vv AND className:vvNode4 AND date:"+s);
BooleanQuery query = new BooleanQuery();
//float类型单独查询,合并到上面查询结果就错误,所以单独
Query q1 = NumericRangeQuery.newFloatRange("value", 2.22f, 2.22f, true, true);
query.add(q1, BooleanClause.Occur.MUST);
//创建复合查询query
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_47, fields, new StandardAnalyzer(Version.LUCENE_47));  
Query q2 = queryParser.parse(queries);  
query.add(q2, BooleanClause.Occur.MUST);
//查询
TopDocs tds = searcher.search(query, Integer.MAX_VALUE);

分享到:
评论

相关推荐

    luqum:一个 lucene 查询解析器,生成 ElasticSearch 查询等等!

    luqum - Python 中的 lucene 查询解析器,使用 PLY “luqum”(如在 LUcene QUery Manipolator 中)是一种用于解析在编写的并构建抽象语法树以检查、分析或以其他方式操作搜索查询的工具。 它可以丰富 Lucene Query ...

    IK Analysis for Elasticsearch:一个将Lucene IK分析器集成到elasticsearch中的插件-开源

    最初是一个基于开源项目 Luence 为主要应用,结合词典分词和语法分析算法的中文分词组件。 从3.0版本开始,IK已经发展成为Java通用的分词组件,独立于Lucene项目,同时提供了Lucene的默认优化实现。 在 2012 版本中...

    lucene2.9.1完整DEMO及开发文档

    //创建一个语法分析器 IndexWriter iwriter = null; Directory directory = null; try { directory = FSDirectory.open(destDir); //把索引文件存储到磁盘目录 //创建一个IndexWriter(存放索引文件的目录...

    lecture-lucene.pptx

    lucene分析,介绍了lucne建立索引以及查询的过程,包括语法分析器,过滤器,切词器,有想了解lucene的同学可以从中获取到自己想要的东西

    lucene2.9.1所有最新开发包及源码及文档

    提供了一些内置的分析器:最常用的是StandardAnalyzer 2) index模块:负责索引的读写。 对索引文件的segment进行写、合并、优化的IndexWriter类。对索引进行读取和删除操作的IndexReader类。 3) store模块:负责...

    IK Analysis for Elasticsearch:一个将 Lucene IK 分析器集成到 elasticsearch 中的插件-开源

    最初是一个基于开源项目 Luence 为主要应用,结合词典分词和语法分析算法的中文分词组件。 从3.0版本开始,IK已经发展成为Java通用的分词组件,独立于Lucene项目,同时提供了Lucene的默认优化实现。 在 2012 版本中...

    CavalliumDBEngine:具有RocksDB和Lucene Core的Java数据库引擎

    RocksDB和Lucene的非常简单的React式包装器。 这不是数据库,而是Lucene Core和RocksDB的包装,带有一些抽象。 特征 RocksDB键值数据库引擎 快照 多列数据库 预写日志和损坏恢复 多种数据类型: 单值(单身) ...

    javacc2_1(Java Compiler Compiler)

    weblucene中用到过 具体情况不是很了解, Java Compiler Compiler 是一个用JAVA开发的最受欢迎的语法分析生成器。

    自己动手写搜索引擎(罗刚著).doc

    8.1.12 SolrJ查询分析器 264 8.1.13 扩展SolrJ 276 8.1.14 扩展Solr 277 8.1.15 Solr的.net客户端 285 8.1.16 Solr的php客户端 286 8.2 图片搜索 291 8.2.1 图像的OCR识别 292 8.3 竞价排名 296 8.4 Web图分析 297 ...

    SOLR的应用教程

    3.6.4 Solr分词器、过滤器、分析器 42 3.6.5 Solr高亮使用 46 4 SolrJ的用法 46 4.1 搜索接口的调用实例 46 4.2 Solrj的使用说明 47 4.2.1 Adding Data to Solr 47 4.2.2 Directly adding POJOs to Solr 49 4.2.3 ...

    java开源包8

    Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    java开源包1

    Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包11

    Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包2

    Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包3

    Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

Global site tag (gtag.js) - Google Analytics