Elasticsearch提供了基于ISON的DSL (Domain Specific Lanquage)来定义查询。
目录
一、常见查询类型
二、DSLQuery基本语法
三、全文检索查询
3.1 match查询:会对用户输入内容分词,常用于搜索框搜索 ,语法:
3.2 multi match查询:与match查询类似,只不过允许同时查询多个字段,语法:
四、精确查询
五、地理查询
5.1 geo_bounding_box:查询geo point值落在某个矩形范围的所有文档
编辑 5.2 geo_distance:查询到指定中心点小于某个距离值的所有文档
六、复合查询
一、常见查询类型
- 查询所有:查询出所有数据,一般测试用。
例如:match all
- 全文检索 (full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。
例如: match_query、multi_match_query
- 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。
例如:ids、range、term
- 地理 (geo)查询:根据经纬度查询。
例如:geo_distance、geo_bounding_box
- 复合 (compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。
例如:bool、function_score
二、DSLQuery基本语法
查询DSL的基本语法是什么?
- GET /索引库名/_search
- { "query" : { "查询类型" : { "FIELD" : "TEXT" } } }
三、全文检索查询
3.1 match查询:会对用户输入内容分词,常用于搜索框搜索 ,语法:
3.2 multi match查询:与match查询类似,只不过允许同时查询多个字段,语法:
match 和 multi match 的区别是什么?
- match:根据一个字段查询
- multi match:根据多个字段查询,参与查询字段越多,查询性能越差
四、精确查询
精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有:
- term:根据词条精确值查询
- range:根据值的范围查询
精确查询常见的有哪些?
- term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
- range查询:根据数值范围查询,可以是数值、日期的范围
五、地理查询
根据经纬度查询。常见的使用场景包括:
5.1 geo_bounding_box:查询geo point值落在某个矩形范围的所有文档
5.2 geo_distance:查询到指定中心点小于某个距离值的所有文档
六、复合查询
实现更复杂的搜索逻辑,例如:复合(compound)查询:复合查询可以将其它简单查询组合起来。
fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名。
elasticsearch中的相关性打分算法是什么?
- TF-IDF:在elasticsearch5.0之前,会随着频增加而越来越大
- BM25:在elasticsearch5.0之后,会随着词频增加而增大,但增长曲线会趋于水平