Search API
elasticSearch支持两种查询方式:
1:URI Search
- q 指定查询的语句,语法为:Query String Syntax
- df:q中不指定字段时默认查询的字段,如果不指定,es会查询所有字段
- sort:排序
- timeout:指定超过时间,默认不超时
- form,size用于分页
Query String Syntax
term,phrase
布尔查询:
AND ,OR NOT (全部要大写)
+(%2B),-分别对应must和must_not
范围查询-支持数值和日期
区间写法:闭区间:[],开区间用{}
- age:[1 TO 10 ] == 1<=age<=10
- age:[1 TO 10 } == 1<=age<10
- age:[1 TO] == age>=1
- age:[* TO age] == age<=10
算数符号写法:
age:>=1
age:(>=1&&<=10) 或者 age:(+>=1 +<=10)
通配符查询
- ?代表1个字符,*代表0个或者多个字符
正则表达式匹配:
模糊匹配
- name:roam~1:匹配与roam差一个character的词,比如foam,roams等
近似度查询:
- “fox quick”~5:以term为单位进行差异比较,如“quick fox brown fox ”会被匹配
Query DSL 2:RequestBody:将查询通过RequestBody发送到服务端
基于json定义的查询语言,主要包括以下两种类型:
字段类查询:比如term,match,range等,只针对某个字段进行查询
全文匹配
针对text类型的字段进行全文检索,会对查询语句先进行分词处理,如match match_phrase等query类型
- match 查询:
minimum_should_match:最小匹配term个数
operator:bool操作类型 - match_phrase
匹配句子 - query_string:
和URIquery中的q,df一样。 - simple Query String Query
不能使用AND OR NOT 关键字,兼容错误
+
代表AND |代表OR -代表NOT match_phrase_prefix
用法和match_phrase一样,作用是匹配前max_expansions
个term
Term Level Query
- term query不会将查询的关键字分词处理,会将关键字作为一个整体
- terms query 可以将多个term放在一起查询
- range query :可用来范围查询数值或者日期
gte(Greater than or equal to) >=
gt (Greater than) >
lte(Less than or equal to)<=
lt(less than) <
bool query
- filter 只过滤符合条件的文档,不计算相关性得分
- must 文档必须符合must中所有条件,会影响相关性得分
- must_not 文档必须不符合must_not中的所有条件
- should 文档可以符合should中的条件,会影响相关性得分
单词匹配
不会对查询做分词处理,直接去匹配字段的倒排索引,如term,terms,range等query类型
- 复合查询:如bool查询,包含一个或多个字段类查询或者复合查询