
1. 单个匹配termQuery
不分词查询,参数1:字段名,参数2:字段查询值。由于不分词,汉字只能查询一个字,英语是一个单词。
```java
QueryBuilder queryBuilder = QueryBuilders.termQuery("fieldName", "fieldValue");
```
2. 分词查询,采用默认的分词器
```java
QueryBuilder queryBuilder2 = QueryBuilders.matchQuery("fieldName", "fieldValue");
```
3. 多个匹配
不分词查询,参数1:字段名,参数2:多个字段的查询值。因为不分词,所以汉字只能查询一个字,英语是一个单词。
```java
QueryBuilder queryBuilder = QueryBuilders.termsQuery("fieldName", "fieldValue1", "fieldValue2...");
```
分词查询,采用默认的分词器
```java
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("fieldValue", "fieldName1", "fieldName2", "fieldName3");
```
4. 匹配所有文件
```java
QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
```
5. 模糊查询常见的5种方法
1. 常用的字符串查询
```java
QueryBuilders.queryStringQuery("fieldValue").field("fieldName"); // 左右模糊
```
2. 常用空格的用于推荐相似内容的查询
```java
QueryBuilders.moreLikeThisQuery(new String[] {"fieldName"}).addLikeText("similarContent"); // 如果不指定fieldName,则默认全部,常用在相似内容的推荐上
```
3. 前缀查询
如果字段没分词,就匹配整个字段前缀
```java
QueryBuilders.prefixQuery("fieldName", "fieldValue");
```
4. fuzzy query: 分词模糊查询,通过增加fuzziness模糊属性来查询
```java
QueryBuilders.fuzzyQuery("fieldName", "fuzzyValue").fuzziness(Fuzziness.ONE);
```
5. wildcard query: 通配符查询,支持* 任意字符串;?任意一个字符
```java
QueryBuilders.wildcardQuery("fieldName", "pattern*"); // 前面是fieldName,后面是带匹配字符的字符串
```
6. 闭区间查询
```java
QueryBuilder queryBuilder0 = QueryBuilders.rangeQuery("fieldName").from("startValue").to("endValue");
```
7. 开区间查询
```java
QueryBuilder queryBuilder1 = QueryBuilders.rangeQuery("fieldName").from("startValue").to("endValue").includeUpper(false).includeLower(false); // 默认是true,也就是包含
```
- 大于
```java
QueryBuilder queryBuilder2 = QueryBuilders.rangeQuery("fieldName").gt("value");
```
- 大于等于
```java
QueryBuilder queryBuilder3 = QueryBuilders.rangeQuery("fieldName").gte("value");
```
- 小于
```java
QueryBuilder queryBuilder4 = QueryBuilders.rangeQuery("fieldName").lt("value");
```
- 小于等于
```java
QueryBuilder queryBuilder5 = QueryBuilders.rangeQuery("fieldName").lte("value");
```
8. Bool查询
- 文档必须完全匹配条件,相当于AND
```java
QueryBuilders.boolQuery().must();
```
- 文档必须不匹配条件,相当于NOT
```java
QueryBuilders.boolQuery().mustNot();
```
- 至少满足一个条件,这个文档就符合SHOULD,相当于OR
```java
QueryBuilders.boolQuery().should();
```