一、相关度评分
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:查询的结果包含哪些字段,指的是元数据