DSL(查询文档):
DSL是基于JSON风格的查询语句
查询所有:
查询出所有的数据,不加条件限制,但是会加分页的限制
列入:
match_all
全文检索查询:
查询利用分词器对用户输入内容分词,然后倒排索引库中匹配
例如:
match_query
multi_match_query
精确查询:
根据精确词条值查询数据,一般查找keyword 数值 日期
boolean等类型字段例如:
共同: 不用进行分词
但是回去建立倒排索引,内容整体存入词条
例如:
ids :根据ID匹配
range :根据数值范围查询
trem :按照数据的值进行查询
地理(geo)查询根据经纬度查询例如:
geo_distance
geo_bounding_box
复合查询:
它本身没有查询条件的,将上诉的各种查询组合起来,合并查询条件
列入:
bool
function_score:算分的
#查询所有
GET /hotel/_search
{
"query": {
"match_all": {}
}
}
基本语法:
全文检索查询:
全文检索查询,会对用户输入内容分词,常用于搜索框搜索。
match查询:
#match
GET /hotel/_search
{
"query": {
"match": {
"all": "如家"
}
}
}
#multi_match
GET /hotel/_search
{
"query": {
"multi_match": {
"query": "外滩如家",
"fields": ["brand","name","business"]
}
}
}
总结:
mutch 和multi_match的区别是什么?
mutch是查询单个字段
multi_match可以数组形式查询多个字段
参与查询字段越多查询性能越差
精确查询:
精确查询一般查找keyword,数值 日期 booolean 等类型字段
所以不会多搜索条件分词 常见的有:
精确查询:
term:根据词条精确值查询
range:根据值的范围查询
#term查询
GET /hotel/_search
{
"query": {
"term": {
"FIELD": {
"value": "上海"
}
}
}
}
#range查询
GET /hotel/_search
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 300
}
}
}
}
地理查询:
根据经纬度查询。常见的场景:
geo_bounding_box:查询geo_point值落在其中矩形范围的
所有文档
geo_distance :(相当于范围查询)查询到指定中心点小其中距离值的所有文档
#distance
GET /hotel/_search
{
"query": {
"geo_distance":{
"distance":"2km",
"location":"32.21,121.5"
}
}
}
相关性算法:
复合型查询:可以将其他的简单查询组合起来实现更为复杂的查询
词条频率:
FunctionScoreQuery:控制打分
人为控制排名:
案列:
给如家这个品牌的酒店排名靠前一些:
把这个问题翻译一下 function score 需要三要素
那些文档需要算法加权?
品牌为如家酒店
算分函数是什么?
weight
加权模式是什么?
求和
#function _score
GET /hotel/_search
{
"query": {
"function_score": {
"query": {},
"functions": [
{
"filter": {
"term": {
"brand": "万怡"
}
},
"weight": 10
}
],
"boost_mode": "sum"
}
}
}
过滤条件 :那些文档要加分
算分函数:如何计算 function score
加权方式;
fuction score 与 query score 如何运算
BOOLQuery(第二种符合查询)
布尔查询是一个或多个查询子句组合 子查询组合方式有:
- must:必须匹配每个子查询 类似“与”
- should:选择性匹配子查询类似“或”
- must_not: 必须不匹配 不参与算分 类似“非”
- filter:不参与算分
需求:
搜索名字包含“如家”价格不高于400
坐标在31.21,121.5周围10km范围内的酒店
#bool查询
GET /hotel/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"FIELD": "TEXT"
}
}
],
"must_not": [
{
"range": {
"price": {
"gte": 400
}
}
}
],
"filter": [
{
"geo_distance": {
"distance": "10km",
"location": {
"lat": 31.21,
"lon": 121.5
}
}
}
]
}
}
}
参与算分的越多那么性能就越差