
Elasticsearch URL Search详解
通过 URL Query 实现搜索
举例:
Get /movies/_search?q=2020&df=title&sort=year:desc&from=O&size=10&timeout=1s
{
"profile":true
}
参数 | 意义 |
---|---|
q |
指定查询语句,使用 Query String Syntax。 |
df |
默认字段,不指定时,会对所有字段进行查询 |
Sort |
排序 / from 和 size 用于分页 |
Profile |
可以查看查询是如何被执行的 |
这里我们定义三条测试数据:
指定字段 v.s 泛查询
这里我们通过指定user
字段为bob
进行查询
#指定字段的查询
GET /users/_search?q=Bob&df=user
{
"profile": "true"
}
GET /users/_search?q=user:Bob
{
"profile": "true"
}
接着在下面我们可以看到,它是通过
TermQuery
类型来进行查询的,查询时的查询格式为user:bob
这里我们把trying
作为查询泛查询的查询参数
#泛查询
GET /users/_search?q=trying
{
"profile": "true"
}
接着在下面我们可以看到,它是通过
DisjunctionMaxQuery
类型来进行查询的,查询时的查询格式如下图所示;我们发现泛查询的查询格式有很多,同时当在数据量大的时候也会影响 Elasticsearch 的效率
Term v.s Phrase
举例:
Term类型:Good Morning 等同于 Good 或(or) Morning
Phrase类型:”Good Morning” 等同于 Good 与(And) Morning。Phrase查询,还要求前后顺序保持一致
Term类型
#使用引号,Phrase查询
GET /users/_search?q=message:out elasticsearch
{
"profile": "true"
}
查询出2条数据,但是我们发现它不仅仅通过TermQuery
类型查询指定的字段进行查询,还通过了DisjunctionMaxQuery
类型对所有的字段进行所有查询
这里呢我们可以直接通过Bool进行查询
GET /users/_search?q=message:(out elasticsearch)
{
"profile": "true"
}
PhraseQuery类型
#使用引号,Phrase查询
GET /users/_search?q=message:"out elasticsearch"
{
"profile": "true"
}
如下图所示查询出两条数据,这里并且其中还为区分大小写。接着我们再通过调换一下顺序看看能否获取到?
获取到0条数据由此可以证明:Phrase查询,还要求前后顺序保持一致
Query String Syntax
- 布尔操作
- AND / OR / NOT 或者 && / || / !
- 必须大写
- title:(matrix Not reloaded)
- AND / OR / NOT 或者 && / || / !
- 分组
- +表示 must
- -表示 must_not
- title:(+matrix -reloaded)
当我们需要message中既要有out又要有elasticsearch,我们就可以以And举例
GET /users/_search?q=message:(out AND elasticsearch)
{
"profile": "true"
}
当我们需要有out但不需要elasticsearch的时候,我们可以以Not举例
GET /users/_search?q=message:(out NOT elasticsearch)
{
"profile": "true"
}
当我们需要必要的参数时,结果同第一种查询结果一样。%2B
表示+
号,本句中必须要有的,是否包含out不一定。
GET /users/_search?q=message:(out NOT %2Belasticsearch)
{
"profile": "true"
}
当然除此之外还有范围查询以及算术查询
Query String Syntax(算术与范围)
- 范围查询
- 区间表示:[]闭区间,{}开区间
- year:{2019 TO 2018}
- year:[* TO 2018]
- 区间表示:[]闭区间,{}开区间
- 算数符号
- year:>2010
- year:(>2010 && <=2018)
- year:(+>2010 +<=2018)
#范围查询 ,区间写法
GET /movies/_search?q=title:beautiful AND year:[2002 TO 2018]
{
"profile":"true"
}
Query String Syntax(通配符查询,正则表达式,模糊匹配与近似查询)
- 通配符查询(通配符查询效率低,占用内存大,不建议使用。特别是放在最前面)
- ? 代表 1 个字符,* 代表 0 或多个字符
- title:mi?d
- title:be*
- ? 代表 1 个字符,* 代表 0 或多个字符
- 正则表达式
- title:[bt]
- 模糊匹配与近似查询
- title:befutifl~1
- title:”lord rings”~2
#通配符查询
GET /movies/_search?q=title:b*
{
"profile":"true"
}
//模糊匹配&近似度匹配
GET /movies/_search?q=title:beautifl~1
{
"profile":"true"
}
GET /movies/_search?q=title:"Lord Rings"~2
{
"profile":"true"
}
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
5
文章
229
粉丝
15
评论
7
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术