"you know, for search“”,这是es的口号,所以es最核心的功能就是查询,es中查询简单来说有两种:
1.子条件查询:即特定字段查询所指特定值。子条件查询又分为query context和filter content
query content:在查询过程中,除了判断文档是否满足条件外,还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好
query content又包括全文本查询(针对文本类型数据)和字段级别的查询(针对结构化数据,如数字,日期)
以下为全文本查询:
模糊匹配:结果会返回包含“ElasticSearch”,"入门",“ElasticSearch入门”这三个关键词的信息
{ “query”:{ "match":{ "title":"ElasticSearch入门" } } }
但是如果我只想查询包含“elasticSearch入门”这个关键词的信息,就用到习语查询
{ “query”:{ "match_phrase":{ "title":"ElasticSearch入门" } } }
多个字段的查询:会查询出author和title中包含elasticSearch的信息
{ “query”:{ "multi_match":{ "query":"elasticSearch" "fields":["author","title"] } } }
语法查询:查询条件遵循某种语法,如下返回包含“elasticSearch”和”入门”或者包含“python”的内容
{ “query”:{ "query_string":{ "query":"(elasticSearch AND 入门) OR python" } } }
以下为字段查询:
查询作者是张三的书籍
{ “query”:{ "term":{ "author":"张三" } } }
查询word_count字段在1000到2000的书籍
{ “query”:{ "range":{ "word_count":{ "gte":1000, "lte":2000 } } } }
filter content:在查询过程中,只判断改文档是否满足条件,只有Yes或者No,es会对filter查询结果做缓存,所以更快些
以下返回“word_count”为1000的书籍
{ “query”:{ "bool":{ "filter":{ "term":{ "word_count":1000 } } } } }