快速入门ElasticSearch(下)

高级查询前面学习的查询是最为基础的查询 , 接下来学习较为高级的查询知识 , 主要包括子条件查询和复合条件查询 。
子条件查询Query context子条件查询也称为叶子条件查询 , 它是以特定字段查询所指特定值;而复合条件查询则是以一定的逻辑组合子条件查询 。 子条件查询分为Query context和Filter context 。
在查询过程中 , Query context除了判断文档是否满足查询条件外 , ElasticSearch还会计算一个_score来标识匹配的程度 , 旨在判断目标文档和查询条件匹配的有多好 。
Query context常用的查询有全文本查询和字段级别查询 , 其中全文本查询主要针对文本类型的数据;而字段级别查询则针对结构化的数据 , 如时间、日期等 。
模糊匹配全文本查询又分为模糊匹配 , 短语匹配和多个字段的查询 , 以及语法的查询 , 这里先学习模糊匹配 。 使用Postman测试工具来演示如何进行模糊查询 , 同样使用POST方法 , 相应的接口API为 , 相对应的JSON格式信息为:
{"query": {"match": {"author": "余思"}}}可以看到查询结果为:
快速入门ElasticSearch(下)文章插图
接下来再来尝试搜索title中包含Java入门的文档 , 相对应的JSON格式信息为:
{"query": {"match": {"title": "Java入门"}}}神奇的事情发生了 , 居然把所有包含Java或者入门的文档都给查询出来了 , 其实这就是模糊查询的弊端 , 也就是说此时"Java入门"这一词语被拆分为"Java"和"入门"这两个词语 , 然后再进行模糊查询 , 而我们实际上想查询的则是"Java入门"这个整体 。
短语匹配那么如何解决上述问题呢?可以使用短语匹配 , 只需将其中的match关键字修改为match_phrase即可:
{"query": {"match_phrase": {"title": "Java入门"}}}查询结果如下所示:
快速入门ElasticSearch(下)文章插图
多个字段的模糊匹配查询接下来学习多个字段的模糊匹配查询 , 它的关键字是multi_match 。 同样使用POST方法 , 相应的接口API为 , 相对应的JSON格式信息为:
{"query": {"multi_match": {"query": "余思","fields": ["author","title"]}}}以上的JSON信息表示作者或者标题中包含余思的文档就会被查询出来 。
语法查询接下来学习语法查询 , 它是根据一定的语法规则来进行查询 , 经常使用在Kibana中 , 用于支持数据搜索 , 且支持通配符 , 范围查询、布尔查询和正则表达式 。 语法查询的关键字是query_string , 同样使用POST方法 , 相应的接口API为 , 相对应的JSON格式信息为:
{"query": {"query_string": {"query": "Java"}}}查询结果如下所示:
快速入门ElasticSearch(下)文章插图
现在假设需要查询包含Java或者C的文档记录 , 此时相对应的JSON格式信息为:
{"query": {"query_string": {"query": "(Java) OR (C)"}}}查询结果如下所示 , 可以看到一共有5条查询记录 , 包括C , C++ , C#和Java:
快速入门ElasticSearch(下)文章插图
当然开发者还可以指定查询的字段 , 如前面的例子 , 只搜索标题和作者中包含Java和C的文档记录 , 此时相应的JSON格式信息为:
{"query": {"query_string": {"query": "(Java) OR (C)","fields": ["author","title"]}}}字段级别查询字段级别查询针对的是结构化的数据 , 如时间、日期等 , 接下来就开始学习如何对结构化的数据进行查询 。 字段级别查询的关键字是term(具体项) , 同样使用POST方法 , 相应的接口API为 , 相对应的JSON格式信息为:


推荐阅读