クエリの解析に格納されたデータを達成するために、ES、エンドポイントは_searchで、クエリ2の主な形式があります。
URIの検索:操作しやすい、クエリ構文の一部のみが含まれ、コマンドラインのテストが容易な
リクエストボディ検索:ES完全なクエリ構文のクエリDSL(ドメイン固有言語)を提供
URIの検索ブリーフ
URLクエリ検索パラメータ、以下の共通のパラメータによって達成:
Q:クエリ構文は、クエリ文字列の構文で指定
DF:デフォルトのフィールドは、Qは、フィールドに指定されていない場合、指定されていない場合は、ESはすべてのフィールドを照会照会
ソート:ソート
タイムアウト:タイムアウトを指定し、デフォルトはタイムアウトされていない
サイズ、から:とページ上
-
##指定字段查询和 ?q=
2012&df=title一样
-
GET /movies/_search?q= title:
2012&sort=
year:
asc&from=
0&size=
10
リクエストボディ検索ブリーフ
クエリhttp request body
ESへの送信は、主に以下のパラメータが含まれています。
query:
沿ってQuery DSL
、クエリの構文from,size
timeout
sort
- ...
URI Search详解
クエリ文字列の構文
1パンクエリとクエリの指定したフィールド
q=2012/q= title:2012
泛查询 全字段查询 不字段字段
-
## 泛查询 和 指定字段查询
-
##指定字段查询和 ?q=2012&df=title一样
-
GET /movies/_search?q= title:
2012&sort=year:asc&
from=
0&size=
10
-
#泛查询
-
GET /movies/_search?q=
2012&sort=year:asc&
from=
0&size=
10
2 、term与phrase查询
alfred way 等效于 alfred OR way
"alfred way" 词语查询,phrase查询要求先后顺序
-
# 查找美丽心灵, Mind为泛查询
-
GET /movies/_search?q=title:Beautiful Mind
-
{
-
"profile":
"true"
-
}
-
-
#使用引号,Phrase查询 同时满足 且位置一样
-
GET /movies/_search?q=title:
"Beautiful Mind"
-
{
-
"profile":
"true"
-
}
3、 Group分组指定
,使用括号指定匹配的规则
(quick OR brown) AND fox
status:(active OR pending) title:(full text search)
使用()表示分组 title:(full text search) 相当于 full or text or search
-
#分组,Bool查询 只要包含 Beautiful或者 Mind就可以
-
GET /movies/_search?q=title:(Beautiful Mind)
-
{
-
"profile":
"true"
-
}
-
-
GET /movies/_search?q=title:(Beautiful
AND Mind)
-
{
-
"profile":
"true"
-
}
4、布尔操作符
-
##布尔操作符
-
##
AND /
OR /
NOT 或者 && / || / ! 都必须大写
-
#分组 + -
-
# + 表示 must
AND
-
#- 表示
not must
-
GET /movies/_search?q=title:(+Beautiful -Mind)
-
-
#phrase查询
-
GET /movies/_search?q=title:(Beautiful && Mind)
-
{
-
"profile":
"true"
-
}
-
GET /movies/_search?q=title:(Beautiful
OR Mind )
-
{
-
"profile":
"true"
-
}
-
#存在Beautiful 且不包含 Mind
-
GET /movies/_search?q=title:(Beautiful
NOT Mind )
-
{
-
"profile":
"true"
-
}
-
-
# 查找美丽心灵 或的关系,有beautiful或者有mind
-
GET /movies/_search?q=title:(Beautiful %
2B Mind)
-
{
-
"profile":
"true"
-
}
5、范围查询
,支持数值和日志
1)区间写法,闭区间用[],开区间用{}
-
age: [
1
TO
10]意为
1<=age<=
10
-
age: [
1
TO
10}意为
1<=age<
10
-
age: [
1
TO ]意为 age>=
1
-
age: [*
TO
10]意为 age<=
10
2)算数符号写法
age:>=1
age:(>=1&&<=10)或者age:(+>=1 +<=10)
6、 通配符查询
:?
代表一个字符,*
代表0或多个字符
name:t?m
name:tom*
通配符匹配执行效率低,且占用较多内存,不建议使用
如无特殊需求,不要将?/*放在最前面
7、正则表达式
name:/[mb]oat/
8、模糊匹配 fuzzy query
-
name
:roam~1
-
匹配与
roam差一个
character的词,比如
foam
roams等
9、近似度查询 proximity search
-
"fox quick"~
5
-
以term为单位进行差异比较,比如
"quick fox"
"quick brown fox"都会被匹配
10 测试实例
-
# 查找美丽心灵 或的关系,有beautiful或者有mind
-
GET /movies/_search?q=title:(Beautiful %
2B Mind)
-
{
-
"profile":
"true"
-
}
-
-
#范围查询 ,区间写法 %
7D表示}
-
#闭区间[
2002
TO
2018] 开区间{
2002
TO
2018}
-
#组合 {*
TO
2018]
-
-
#范围查询 ,区间写法
-
GET /movies/_search?q=title:beautiful
AND
year:[
2002
TO
2018%
7D
-
{
-
"profile":
"true"
-
}
-
-
-
#下面如果不写
AND 表示
or的查询关系
-
GET /movies/_search?q=title:beautiful
year:[
2002
TO
2018]
-
{
-
"profile":
"true"
-
}
-
-
##运算符号
-
##
year:(>
2012
AND <=
2018)
year:(>
2012)
year:(->
2012 +<=
2018)
-
GET /movies/_search?q=title:beautiful
AND
year:(->
2012 +<=
2018)
-
{
-
"profile":
"true"
-
}
-
-
#通配符查询 *表示
0个或者多个 ?代表
1个字符
-
GET /movies/_search?q=title:b*
-
{
-
"profile":
"true"
-
}
-
-
#模糊匹配&近似度匹配 ~
1 表示 beautifl 值出现一个错别字
-
GET /movies/_search?q=title:beautifl~
1
-
{
-
"profile":
"true"
-
}
-
##
"Lord Rings"~
2 表示
"Lord Rings" 之间允许出现两个单词
-
#~
3之间允许出现小于等于
3个单词
-
GET /movies/_search?q=title:
"Lord Rings"~
3
-
{
-
"profile":
"true"
-
}