网站首页 文章专栏 elasticsearch学习(四)----数据查询
elasticsearch 用来干啥?
答:高效,快速实现各种听起来很美好,实现起来很复杂的查询需求。
term:term主要用于精确匹配,如字符串、数值、日期等(不适合情况:1.列中除英文字符外有其它值 2.字符串值中有冒号或中文 3.系统自带属性如_version)
{ "query": { "term": {"id": 1} } }
terms:跟term有点类似,但可以同时指定多个条件,相当于union all的作用,汇聚所有查询的值
{ "query": { "term": {"date": ["2014-09-01","2014-10-03"]} } }
range:区间查询
{ "query": { "range":{ "age":{ //查询age字段 "gt":2, //大于2 "lt":100 //小于100 } } } }
bool过滤:用来合并多个过滤条件的查询结果的布尔逻辑,必须包含must和should中的一个或多个。它包含以下一些操作
must: 文档必须完全匹配条件 简单的说就是 & 与
should: should下面会带一个以上的条件,至少满足一个条件,这个文档就符合should 简单的说就是 || 或
must_not: 文档必须不匹配条件 简单的说就是 ! 非
{ "query": { "bool":{ "must":{ //and age==50 "term":{"age":50} }, "must_not":{ //not uid=922307 "term":{"uid": "922307"} }, "should":[ // tag1==8 or tag2=1 {"term":{"tag1":8}}, {"term":{"tag2":1}} ] } } }
match: 一个标准的查询,它可以精确或模糊查询
{ "query": { "match":{ "title":"起火 快递" # title中包含起火 或快递 } } }
常用于多字段匹配
{ "multi_match": { "query": "需要查询的内容", "type": "best_fields", #字段可分配权重,计算分值 取某个field匹配度最高的那个分数 "fields": [ "title", "body" ], } } { "multi_match": { "query": "需要查询的内容", "type": "most_fields", #匹配到的字段越多分值越高 "fields": [ "title", "body" ], } } "query": { "multi_match": { "query": "需要查询的内容", "operator":"and", "fields": ["title","body"], "type": "cross_fields" # 取多个query针对每一个field的评分最小值,即对每个字段都计算分值 } } }
regexp: 正则匹配
{ "query": { "regexp":{ "title":".+[0-9]*.+" //匹配 任意字符 任意数字 任意字符 正则表达式 } } }
prefix: 前缀
{ "query": { "prefix":{ "title":"1" // title 以1开头的数据,不适合值为中文 } } }
phrase_match: 短语匹配 对这个部分词不经常拆词的匹配
{ "query": { "match_phrase":{ "title":"test bydls" // title中包含test bydls这个整体而不是test 或 bydls } } }
转载请注明出处