开发者学堂课程【ElasticSearch 最新快速入门教程: Query 概述】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/642/detail/10651
Query 概述
内容介绍:
一、查询所有
二、解析查询字符串
三、通配符查询
四、词条查询
五、字段匹配查询
六、只查询 ID
七、相似度查询
八、范围查询
九、跨度查询
十、组合查询
十一、排序查询
一、查询所有
matchAllQuery() 匹配所有文件
match_all 查询是 Elasticsearch 中最简单的查询之一。它使我们能够匹配索引中的所有文件。
SearchResponse
searchResponse
=
client.prepareSearch(blog2")
.setTypes(article")
.setQuery(QueryBuilders.matchllQuery
()
)
.
get
();
SearchHits
hits=searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
二、解析查询字符串
相比其他可用的查询,query_string 查询支持全部的
ApacheLucene 查询语法
针对多字段的 query_string 查询
SearchResponse
searchResponse
=
client
.
prepare
Search("blog2"
).
setTypes(
”
article")
.setQuery(QueryBuilders.queryStringQuery
(
“
全
面
")geto:
SearchHitshits
=
searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
三、通配符查询(wildcardQuery)
*匹配多个字符,?匹配1个字符
注意:避免*开始,会检索大量内容造成效率缓慢
SearchResponse
searchResponse
=
client.prepare
Search("blog2"setTypes(
“
article")
.setQuery(QueryBuilders.wildcardQuery(
“
content
”,
”elas*c?”)
SearchHits
hits
=
searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
四、词条查询(termQuery)
词条查询是 Elasticsearch 中的一个简单查询。它仅匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条
termQuery("key,obj)完全匹配
termsQuery("key"j 一次匹配多个值,只要有一个值是正确的,就可以查询出数据
SearchResponse
searchResponse
=
clientprepareSearc
h
("blog2".setTypes(
”
article")
.setQuery(QueryBuilders.termQuery
(“
content”
,”
搜索
”))
.
get();
SearchResponse
searchResponse
=
client.prepareSearch
(“
blog2".setTypes
(“
article")
.setQuery(QueryBuilders.termsQuery("content
””
搜索
””
全文”.get
();
SearchHits
hits
=
searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
五、字段匹配查询
matchQuery("key.obj)单个匹配,field 不支持通配符,前缀具高级特性
match 查询把 query 参数中的值拿出来,加以分析,然后构建相应的查询。使用 match 查询时,Elasticsearch 将对一个字段选择合适的分析器,所以可以确定传给 match 查询的词条将被建立索引时相同的分析器处理。
multimMatchQuery("text"field1"field2");匹配多个字段,field 有通配符查询功能
SearchResponse
searchResponse
=
client.prepareSearch
("blog2").setTypes(
“
article")
setQuery(QueryBuilders.matchQuery("content
”“
搜
索”
g
e
t
();
SearchResponse
searchResponse
=
client.prepareSearch
("blog2").setTypes(
“
article")
setQuery(QueryBuilders.multiMatchQuery
(“
搜索
“)).get();
SearchHits
hits
=
searchResponse.getHits
();
//获命中次数,查询结果有多少对象
六、只查询 ID(标识符查询)
标识符查询是一个简单的查询,仅用提供的标识符来过滤返回的文档。此查询针对内部的 uid 学段运行,所以它不需要启用 id 学段
SearchResponse
searchResponse
=
client.prepareSearch
("blog2")setTypes(article")
setQuery(QueryBuilders.idsQuery0.ids1"get
SearchHitshits=searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
七、相似度查询
fuzzy 查询是模糊查询中的第三种类型,它基于编辑距离算法来匹配文档
SearchResponse
searchResponse
=
client.prepareSearch
(blog2").SetTypes(article")
.setQuery(QueryBuilders.fuzzyQuery(content
SearchHits
hits
=
searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
八、范围查询
范围查询使我们能够找到在某一字段值在某个范围里的文档,字段可以是数值型,也可以是基于字符串的
SearchResponsesearchResponse=clientprepareSearch
(
"blog2").setTypes(
”
article")
.
setQuery(QueryBuilders.rangeQuery(content).from(我们”.t(解决方案).
includeLower(true).includeUpper(true).get
();
SearchHits
hits
=
searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
includeLower(true):包含上界
IncludeUpper(true):包含下界
九、跨度查询
下面代码表示,从首字母开始,查询 content 字段=问题的数据,问题前面的词为300个,可以测试30看是否能查询出数据
SearchResponse
searchResponse=client.prepareSearch
("blog2").setTypes
“
(article")
.setQuery(QueryBuilders.spanFirstQuery(QueryBuilders.spanTermQuery
(“
content
”,“问题”
)
,300)).get();
SearchHits
hits=searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
十、组合查询(复杂查询)
must(QueryBuilders):AND
mustNot(QueryBuilders)
:
NOT
should(QueryBuilders):
O
R
在定义 json:放置到 Elasticsearch 的插件中
SearchResponse
searchResponse=clientprepareSearch
(
blog2"setTypes(
”
article
”
)
.setQuery(QueryBuilders.boolQuery0.mustQueryBuilderstemQuerytitl
搜索”.must(QueryBuilders.wildcardQuery(
“
content
”)
SearchHits
hits
=
searchResponse.getHits
();
//获取命中次数,查询结果有多少对象
十一、排序查询
SearchResponse
searchResponse
=
client.prepareSearch
("blog2").setTypes(
“
article")
setQuery(QueryBuilders.matchAllQuery
()
)
.
addSort("id"
,SortOrder.DESC).grt();
S
earchHits
hits
= searchReponse.getHits();
//获取命中次数,查询结果有多少对象