在查询过程当中,除了判断文档是否知足查询条件,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好。正则表达式
{ "query":{ "match":{ "tittle":"ElasticSearch学习" } } }
像上面这样查询,会将包含”ElasticSearch“和”学习“结果查出来json
将上面的”match“改成”match_phrase“,即缓存
{ "query":{ "match_phrase":{ "tittle":"ElasticSearch学习" } } }
这样就会把”ElasticSearch学习“作全词匹配,只有彻底包含”ElasticSearch学习“的结果才会返回学习
{ "query":{ "multi_match":{ "query":"李六", "fields":["author","tittle"] } } }
使用”multi_match“,将要查询的关键字写在”query“子字段中,并列出所要查询的域,如上是要查询”author“和”tittle“字段中包含”李六“的结果spa
语法查询是根据必定的语法规则进行的查询,常常在kibana中用,作数据搜索用的,也支持通配符,范围查询,布尔查询,正则表达式等,语法表达比较丰富。code
{ "query":{ "query_string":{ "query":"(李六 AND 哈哈) OR 西瓜书", "fields":["author","tittle"] } } }
上述查询示例所要实现的是在域“author” 和“tittle”中,查找同时包含“李六”和“哈哈”,或者包含“西瓜书”的结果。文档
{ "query":{ "term":{ "author":"李六" } } }
指定查询“author”为“李六”的结果string
{ "query":{ "range":{ "word_count":{ "gte":20000, "lte":30000 } } } }
"gte"表示“大于等于”,“lte”表示“小于等于”,这里是查询“word_count”字段大于等于20000,小于等于30000的结果。it
在查询过程当中,只判断该文档是否知足条件,只有Yes或者No.ast
{ "query":{ "bool":{ "filter":{ "term":{ "word_count":20000 } } } } }
"filter"要结合“bool”来使用,上述语句查询“word_count”字段为20000的数据。“filter”就是用来作数据过滤的,并且ES会对它的结果进行缓存,因此相对“query”要快一些。
查询出”tittle“中含有”es“的结果以后能够发现每条结果的score是不一样的,下面的语句把查出来的结果的score值固定为了2
{ "query":{ "constant_score":{ "filter":{ "match":{ "tittle":"es" } }, "boost":2 } } }
下面的”should“至关于”或“,只要”author“中包含”李六“或者”tittle“中包含”es“的结果就会被返回
{ "query":{ "bool":{ "should":[ { "match":{ "author":"李六" } }, { "match":{ "tittle":"es" } } ] } } }
还有”must“和”must_not“,分别对用的”与“,和”非“,使用的时候只须要把”should“替换便可。除此以外,还能够结合filter对查询结果作过滤:
{ "query":{ "bool":{ "must":[ { "match":{ "author":"李六" } }, { "match":{ "tittle":"es" } } ], "filter":[ { "term":{ "publish_date":"1995-03-16" } } ] } } }
以上查询结果要求”author“必须包含”李六“,”tittle“必须包含”es“,而且对结果进行过滤,只返回”publish_date“为”1995-03-16“的结果