一、所使用版本的介绍
使用的是elasticsearch5.4.6版本,在此只是简单介绍搜索部分的api使用。
二、搜索时api的实现
1、Match Query 单个字段匹配查询(接受文本/数值/日期)
a、方法:matchQuery(String name, Object text);
b、实例如下:
QueryBuilder qb = QueryBuilders.matchQuery("name", "kimchy elasticsearch");//name是field,kimchy elasticsearch是要查询的字符串
QueryBuilder qb = QueryBuilders.matchQuery("name", object);//name是field,object是要查询的对象(如:list,object等)
注:匹配一个field,field不支持通配符
QueryBuilder qb = QueryBuilders.matchPhraseQuery("title", "molong1208 blog");
2、MultiMatch Query 多个字段匹配查询
a、方法:multiMatchQuery(Object text, String... fieldNames);
b、实例如下:
QueryBuilder qb = QueryBuilders.multiMatchQuery(
//kimchy elasticsearch是要查询的字符串
"kimchy elasticsearch",
//user 和 message都是field
"user", "message");
注:匹配多个字段, field有通配符忒行
3、Boolean Query 匹配与其他查询的布尔组合匹配的文档的查询
a、方法:new BoolQueryBuilder()
b、实例如下:
QueryBuilder qb = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("content", "test1"))
.must(QueryBuilders.termQuery("content", "test4"))
.mustNot(QueryBuilders.termQuery("content", "test2"))
.should(QueryBuilders.termQuery("content", "test3")).minimumShouldMatch(1);
注:如果bool查询语句中不存在must,则必须至少有一个should查询,同时可以通过minimum_should_match参数来设置至少需要满足的should个数.
4、Boosting Query Boosting查询可用于有效地匹配与给定查询匹配的结果。与布尔查询中的“不”子句不同,它仍然选择包含不希望的术语的文档,但是降低了它们的总得分。
a、方法:boostingQuery(QueryBuilder positiveQuery, QueryBuilder negativeQuery)
b、实例如下:
QueryBuilder qb = QueryBuilders.boostingQuery(
QueryBuilders.termQuery("field1", "3"), //希望包含的
QueryBuilders.termQuery("field2", "fff"))//包含不希望的
.negativeBoost(0.2f);//设置满足negativeQuery精度
5、Terms Query
一次完全匹配多个值
a、方法:termsQuery(String name, String... values),
termsQuery(String name, int... values),
termsQuery(String name, long... values),
termsQuery(String name, float... values),
termsQuery(String name, double... values),
termsQuery(String name, Object... values),
termsQuery(String name, Collection<?> values)
b、实例如下:
QueryBuilder qb1 = QueryBuilders.termsQuery("key","22","33");
List<String> list = new LockFreeVector<String>();
list.add("22");
list.add("33");
QueryBuilder qb2 = QueryBuilders.termsQuery("key",list);
QueryBuilder qb3 = QueryBuilders.boolQuery()
.must(new QueryStringQueryBuilder("233").field("title"))
.must(QueryBuilders.termsQuery("key","22","33"))
.must(QueryBuilders.boolQuery()
.should(QueryBuilders.termsQuery("title","s"))
.should(QueryBuilders.termsQuery("code", "小李子")).minimumShouldMatch(2));
注:如果bool查询语句中不存在must,则必须至少有一个should查询,同时可以通过minimum_should_match参数来设置至少需要满足的should个数.
6、 Term Query 单个字段匹配查询
a、方法:termsQuery(String name, String values),
termsQuery(String name, int values),
termsQuery(String name, long values),
termsQuery(String name, float values),
termsQuery(String name, double values),
termsQuery(String name, Object values)
b、实例如下:QueryBuilder qb1 = QueryBuilders.termQuery("key","22");
a、方法:idsQuery().addIds(String... types),
idsQuery(String... types)
b、实例如下:
QueryBuilder qb = QueryBuilders.idsQuery("34","12"),
QueryBuilder qb = QueryBuilders.idsQuery().addIds("34","12")
8、Match All Query 全部匹配
a、方法:matchAllQuery();
b、实例如下:
QueryBuilder qb = QueryBuilders.matchAllQuery();