Lucene查询语法

  1. TermQuery 是最常用的查询对象,也是 Lucene 可以使用的许多复杂查询的基础。它用于根据区分大小写的密钥检索文档
Query query = new TermQuery(new Term("title","java"));
  1. MatchAllDocsQuery匹配所有文档
//查询所有文档
Query query = new MatchAllDocsQuery();
// 相当于查询语法 :  *:*
  1. TermRangeQuery是用于字符串范围查询的,既然涉及到范围必然需要字符串比较大小,字符串比较大小其实比较的是ASC码值,即ASC码范围查询。一般对于英文来说,进行ASC码范围查询还有那么一点意义,中文汉字进行ASC码值比较没什么太大意义,所以这个TermRangeQuery了解就行,用途不太大,一般数字范围查询NumericRangeQuery用的比较多一点,比如价格,年龄,金额,数量等等都涉及到数字,数字范围查询需求也很普遍
String fieldName = "title";
String lowerTermString = "ja";
String upperTermString = "va";
Query query = new TermRangeQuery(fieldName,
                new BytesRef(lowerTermString),
                new BytesRef(upperTermString), false, false);
  1. NumericRangeQuery
Query q = NumericRangeQuery.newFloatRange("weight", 0.03f, 0.10f, true, true);
  1. PrefixQuery用于搜索是否包含某个特定前缀
PrefixQuery query = new PrefixQuery(new Term("title", "/java"));
  1. BooleanQuery 用于满足多个条件
Query query1 = new TermQuery(new Term("title", "java"));
Query query2 = new TermQuery(new Term("id", "1"));
BooleanClause bc1 = new BooleanClause(query1, BooleanClause.Occur.MUST);
BooleanClause bc2 = new BooleanClause(query2, BooleanClause.Occur.MUST_NOT);
Query query = new BooleanQuery.Builder().add(bc1).add(bc2).build();
(1).MUST和MUST:取得连个查询子句的交集。 
(2).MUST和MUST_NOT:表示查询结果中不能包含MUST_NOT所对应得查询子句的检索结果。 
(3).SHOULD与MUST_NOT:连用时,功能同MUST和MUST_NOT。
(4).SHOULD与MUST连用时,结果为MUST子句的检索结果,但是SHOULD可影响排序。
(5).SHOULD与SHOULD:表示“或”关系,最终检索结果为所有检索子句的并集。
(6).MUST_NOT和MUST_NOT:无意义,检索无结果。
  1. PhraseQuery查询短语,这里面主要有一个slop的概念, 也就是各个词之间的位移偏差, 这个值会影响到结果的评分.如果slop为0,当然最匹配。slop太大的时候对查询效率是有影响的,所以在实际使用中要把该值设小一点. PhraseQuery对于短语的顺序是不管的,这点在查询时除了提高命中率外,也会对性能产生很大的影响, 利用SpanNearQuery可以对短语的顺序进行控制,提高性能
PhraseQuery.Builder builder = new PhraseQuery.Builder(); 
builder.add(new Term("title", "hello"),0);
builder.add(new Term("title", "word"),2);
builder.setSlop(1);
Query query = builder.build();
  1. WildcardQuery 通配符搜索,需要注意的是child, mildew的分值是一样的
//使用通配符查询,*代表0个或多个字母,?代表0个或1个字母。
Query query=new WildcardQuery(new Term("title","java*"));
  1. FuzzyQuery 模糊查询, 需要注意的是两个匹配项的分值是不同的,这点和WildcardQuery是不同的。
Query query = new FuzzyQuery(new Term("title","java"),2,3,50,false);
  1. 通过QueryParser构造查询单条件
Analyzer analyzer = new StandardAnalyzer();
QueryParser queryParser = new QueryParser("title", analyzer);
Query query = queryParser.parse("java");
  1. 通过构造多条件查询MultiFieldQueryParser
Analyzer analyzer = new StandardAnalyzer();
String[] queries= {"1","java"};
		String[] fields = { "id", "title" }; 
		Query query = MultiFieldQueryParser.parse(queries, fields, analyzer);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值