DSL查询语法:

查询DSL的基本语法是什么?match查询

GET /索引库名/_search
{“query”:{“查询类型”:{“FIELD”:”TEXT”}}}
示例: GET hotel/_search
{
“query”: {
“match_all”: { }
}
}

match查询:全文检索查询的一种,会对用户输入内容分词,然后去倒排索引库检索,示例:

GET hotel/_search
{
“query”: {
“match”
“name”: “上海如家”
}
},
“size”: 50 # size属性: 返回50条数据 可以不写看情况
}**

multi_match: 与match查询类似,只不过允许同时查询多个字段,示例:

同时查询多个字段 不推荐 影响查询性能 以后会优化 把想查的字段都封装到一个字段里面
GET hotel/_search
{
“query”: {
“multi_match”: {
“query”: “上海如家”,
“fields”: [“name”,”city”,”brand”] # 这里面是各个字段名
}
}
}

match和multi_match的区别是什么?全文检索查询

1.match:根据一个字段查询
2.multi_match:根据多个字段查询,参与查询字段越多,查询性能越差

精准查询:精准查询一般是查找keyword、数值、日期、Boolean等类型字段。所以不会对搜索条件分词。常见的有:

1.term:根据词条精准值查询 :星级是二钻的酒店,示例: GET hotel/_search
{
“query”: {
“term”: {
“starName”: “二钻”
}
}
}
2.range:根据值的范围查询 :查询价格大于等于500小于等于1000的酒店,示例:gtelte 如果写成gtlt则表示:大于小于 没有等于
GET hotel/_search
{
“query”: {
“range”: {
“price”: {
“gte”: 500,
“lte”: 1000
}
}
}
}

地理坐标查询:

1.根据经纬度查询:查询geo_point值落在某个矩形范围的所有文档 (定义定义一个左上角和一个右下角的位置 ) 示例:
GET hotel/_search
{
“query”: {
“geo_bounding_box”:{
“location”:{
“top_left”:{
“lat”:31.1,
“lon”:121.5
},
“bottom_right”:{
“lat”:30.9,
“lon”:121.7
}
}
}
}
}
2.geo_distance:查询到指定中心的小于某个距离值得所有文档 (按方圆半径查询) 示例:
注意:纬度在前,经度在后!!!
GET hotel/_search
{
“query”: {
“geo_distance”:{
“distance”:”15km”,
“location”:”31.04027,121.618605”
}
}
}

DSL查询语法-相关性算分

elasticsearch中的相关性打分算法是什么?

1.TF-IDF:在elasticsearch5.0之前,会随着词频增加而越来越大
2.BM25:在elasticsearch5.0之后,会随着词频增加而增大,但增长曲线会趋于水平

复合查询:示例:

GET hotel/_search
{
“query”: { # 算分函数查询类型
“function_score”: {
“query”: { # 原始查询条件
“match”: {
“name”: “上海”
}
},
“functions”: [ # 算分函数
{
“filter”: { # 文档筛选条件
“term”: {
“brand”: “如家”
}
},
“weight”: 2 #新的得分
}
],
“boost_mode”: “sum” # 加权模式:如何计算最后得分
}
}
}

function score query定义的三要素是什么?

1.过滤条件:哪些文档要加分
2.算分函数:如何计算function score
3.加权方式:function score 与 query score如何运算

DSL查询语法-bool查询

bool查询有几种逻辑关系?

1.must:必须匹配的条件,可以理解为“与”
2.should:选择性匹配的条件,可以理解为“或”
3.must_not:必须不匹配的条件,不参与打分
4.filter:必须匹配的条件,不参与打分

结果集处理-分页

from+size:

1.优点:支持随机翻页
2.缺点:深度分页问题,默认查询上限(from+size)是10000
3.场景:百度、京东、谷歌、淘宝这样的随机翻页搜索

after search:

1.优点:没有查询上限(单词查询的size不超过10000)
2.缺点:只能向后逐页查询,不支持随机翻页
3.场景:没有随机翻页需求的搜索,例如手机向下滚动翻页

scroll:

1.优点:没有查询上限(单词查询的size不超过10000)
2.缺点:会有额外内存消耗,并且搜索结果是非实时的
3.场景:海量数据的获取和迁移。从ES7.1开始不推荐,建议用after search方案。

搜索结果处理-高亮

高亮是什么?

高亮:就是在搜索结果中把搜索关键字突出显示

高亮的原理是什么?

1.将搜索结果中的关键字用标签标记出来
2.在页面中给标签添加css样式

高亮三要素:

1.字段
2.前置标签
3.后置标签
示例:
GET hotel/_search
{
“query”:{
“match”:{
“name”:”外滩如家”
}
},
“highlight”:{ // 专门设置高亮的代码
“fields”:{ //指定要高亮的字段
“name”:{
“pre_tags”:”“ //用来标记高亮字段的前置标签,不写的话默认为
“post_tags”:”“ //用来标记高亮字段的后置标签
}
}
}
}