lucene查询分析器语法

[b]Terms[/b]
[u]Single Terms:[/u]
new Term("key",keyword);

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

[b]Operator[/b]
[u]Key[/u]: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;
}

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


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


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

[b]Escaping Special Characters[/b]

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

[b]有用的一些函数:[/b]
时间类型可以用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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值