开发者学堂课程【ElasticSearch 入门精讲:Query 概述】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/631/detail/10003
ES JavaAPL_ Query 概述
1、查询所有
matchAllQuery()匹配所有文件
match_all 查询是 Elasticsearch 中最简单的查询之一。它使我们能够匹配索引中的所有文件。 SearchReaSearchResponse searchResponse = client.prepareSearch("blog2”)
.setTypes("article").setQuery(QueryBuilders.matchAllQuery()).get();
SearchHits hits = searchResponse.getHits0;//获取命中次数,查询结果有多少对象
2、解析查询字符串
相比其他可用的查询,query_string 查询支持全部的 Apache Lucene 查询语法
针对多字段的 query_string 查询SearchResponse searchResponse = client.prepareSearch("blog2"),setTypes("article")
.
setQuery(QueryBuilders.queryStringQuery("全面")).get();
SearchHits hits = searchResponse.getHits();//获取命中次数,查询结果有多少对象
3、通配符查询(wildcardQuery)
*匹配多个字符,?匹配1个字符
注意:避免*开始,会检索大量内容造成效率缓慢 SearchResponse searchResponse = client.prepareSearch("blog2").setTypes("article")
.setQuery(QueryBuilders.wildcardQuery("content","elas*c?")).get
(
);
SearchHits hits = searchResponse.getHits();//获取命中次数,查询结果有多少对象
4、词条查询(termQuery)
词条查询是 Elasticsearch 中的一个简单查询。它仅匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条
termQuery("key", obj)完全匹配
termsQuery("key", obj1, obj2..)一次匹配多个值,只要有一个值是正确的,就可以查询出数据
/
/SearchResponse searchResponse = client.prepareSearch("blog2").setTypes("article")
//.setQuery(QueryBuilders.termQuery("content","搜索")).get();
SearchResponse searchResponse = client,prepareSearch("blog2").setTypes("article")
.setQuery(QueryBuilders.termsQuery("content ","
搜索
”,"
全文
")).get();
SearchHits hits = searchResponse.getHits();//获取命中次数,查询结果有多少对象
5、字段匹配查询
matchQuery("key",Obj)单个匹配, field不支持通配符,前缀具高級特性
Match 查询把 qUery 参数中的值拿出来,加以分析,然后构建相应的宣询。使用match 查询时,Elasticsdarch 将对一个字段选择合适的分析器,所以可以确定, 传给 match 查询的词条将被建立索引时相同的分析器处理。
multiMatchQuery("text","field1","field2"..);匹配多个字段, field 有通配符查询功能
/
/SearchResponse searchResponse = client.prepareSearch("blog2").setTypes(“article”)
//.setQuery(QueryBuilders.matchQuery("content","搜索")).get();
SearchResponse searchResponse = client,prepareSearch("blog2").setTypes("article")
.setQuery(QueryBuilders.multiMatchQuery("搜索","title","content")).get();
SearchHits hits = searchResponse.getHits();//获取命中次数,查询结果有多少对象
6、只查询 ID(标识符查询)
标识符查询是一个简单的查询,仅用提供的标识符来过滤返回的文档。此查询针对内部的 _uid字段运行,所以它不需要启用_id 字段 SearchResponse searchResponse = client.prepareSearch("blog2").setTypes("article")
.setQuery(QueryBuilders.idsQuery().ids("1")).get();
SearchHits hits = searchResponse.getHits0;//获取命
中次数,查询结果有多少对象
7、相似度查询
fuzzy 查询是模糊查询中的第三种类型,它基于编辑距离算法来匹配文档 SearchResponse searchResponse = client.prepareSearch("blog2").setTypes("article")
.setQuery(QueryBuilders.fuzzyQuery("content","elasticsegrxx")).get();
SearchHits hits = searchResponse.getHits();//获取命中
次数,查询结果有多少对象
8、范围查询
范围查询使我们能够找到在某一字段值在某个范围里的文档,字段可以是数值型,也可以是基于字符串的 SearchResponse searchResponse = client.prepareSearch("blog2").setTypes("article")
.setQuery(QueryBuilders.rangeQuery("content").from("我们").to("解决方案").includeLower(true).includeUpper(true)).get();
SearchHits hits = searchResponse.getHits();//获取命中次数,查询结果有多少对象
includeLower(true):包含上界
IncludeUpper(true):包含下界
9、跨度查询
下面代码表示,从首字母开始,查询 content 字段=问题的数据,问题前面的词为300个,可以测试30看是否能查询出数据。 SearchResponse searchResponse = client.prepareSearch("blog2").setTypes("article")
.setQuery(QueryBuilders.spanFirstQuery(QueryBuilders.spanTermQuery("content","问题"), 300)).get();
SearchHits hits = searchResponse.getHits();//获取命中次数,查询结果有多少对象
10、组合查询(复杂查询)
must(QueryBuilders):AND
mustNot(QueryBuilders): NOT
should(QueryBuilders):OR
在定义 json:放置到 Elasticsearch 的播件中 SearchResponse searchResponse = client.prepareSearch("blog2").setTypes("article")
.setQuery(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("title","搜索")).must(QueryBuilders.wildcardQuery("content","elastic*ch")).get();
SearchHits hits = searchResponse.getHits();//获取命中次数,查询结果有多少对象
11、排序查询 SearchResponse searchResponse = client,prepareSearch("blog2"),.setTypes("article")
.setQuery(QueryBuilders.matchAllQuery())
.addSort("id", SortOrder.DESC).get();
SearchHits hits = SearchResponse.getHits();//获取命中次数,查询结果有多少对象