一、相关度评分
1、当没有指定评分规则时,会依据相关度分数进行排序。一旦指定了排序规则,就不会计算相关度评分,而按照指定指定排序顺序进行显示
2、相关度评分规则
①词频:关键词在每个doc中出现的次数。越高相关度分数越高
②反词频:关键词在整个索引中出现的次数。反词频越高,相关度分数越低
③每个doc长度越长,相关度越低
二、元数据 _source
1、相当于sql语句中要显示的字段,如select name from table where。。。 name就是元数据
2、用法
1 GET index/_search
2 {
3 "_source": {
4 "includes": ["",""],
5 "excludes": ["",""]
6 }
7 }或
8 GET index/_search
9 {
10 "_source": false,
11 "query": {}
12 }
三、全文检索
1、match:match是会被分词的
2、match_all:查询所有数据,会被分词。相当于select * from table;
3、multi_match:
4、match_phrase:会被分词
被检索字段必须包含match_phrase中的所有词项并且顺序必须相同
被检索字段包含的match_phrase中的词项之间不能有其他问题
在考试时要注意题目中是否有phrase关键字,如果有就要用match_phrase
四、分页、排序
从第几条开始,每次查询多少条
按照什么顺序进行排序
1 GET index/_search
2 {
3 "from": 20,
4 "size": 20,
5 "query": {},
6 "sort": [
7 {
8 "price": {
9 "order": "desc"
10 }
11 },
12 {
13 "_score": {
14 "order": "asc"
15 }
16 }
17 ]
18 }
五、高亮
1 GET index/_search
2 {
3 "query": {
4 "term": {
5 "name": {
6 "value": "xiaomi"
7 }
8 }
9 },
10 "highlight": {
11 "fields": {
12 "name": {
13 "pre_tags": [
14 "<b>"
15 ],
16 "post_tags": [
17 "</b>"
18 ]
19 }
20 }
21 }
22 }只针对name字段进行高亮,用<b></b>标签进行包装
1 GET index/_search
2 {
3 "query": {
4 "term": {
5 "name": {
6 "value": "xiaomi"
7 }
8 }
9 },
10 "highlight": {
11 "pre_tags": [
12 "<b>"
13 ],
14 "post_tags": [
15 "</b>"
16 ],
17 "fields": {
18 "name": {}
19 }
20 }
21 }对所有字段进行包装
六、精准查询
1、term和keyword的区别
term搜索不会将搜索词进行分词
keyword在元数据创建索引时不会进行分词
2、match_phrase:会被分词,顺序必须相同且中间不能有其他字符
3、范围查询
1 GET index/_search
2 {
3 "query": {
4 "range": {
5 "price": {
6 "gte": 10,
7 "lte": 20
8 }
9 }
10 }
11 }gt:大于 lt:小于 gte:大于等于 lte:小于等于
七、组合查询
1、must相当于and
2、should相当于or
3、must_not相当于!and
4、filter相当于match,与match不同的是filter不会使用相关度评分进行排序
注意:当must与should需要同时满足时,以must为主。因为should有一个minimum_should_match参数进行控制
在仅使用should时,minimum_should_match为1,代表必须查询出一条结果
当should与must或filter联合使用时,minimum_should_match会自动变为0,表示满足must时就会查出数据
1 GET index/_search
2 {
3 "query": {
4 "bool": {
5 "must": [
6 {
7 "match_phrase": {
8 "name": "chiji shouji"
9 }
10 }
11 ],
12 "should": [
13 {
14 "term": {
15 "price": {
16 "value": 3999
17 }
18 }
19 }
20 ],
21 "minimum_should_match": 1
22 }
23 }
24 }
25 若must条件符合,should条件不符合,minimum_should_match设置为1查不出来结果
26 若must条件符合,should条件不符合,minimum_should_match不设置可以查出来结果,不设置时默认值为0
八、multi_match
1、multi_match:从哪些字段中检索,指的是查询条件
_source:查询的结果包含哪些字段,指的是元数据