DSL (Domain Specific Language 领域特定语言) 需要使用 JSON 作为主体,我们还可以这样查询姓 Smith 的员工:
这个请求会返回同样的结果。你会发现我们在这里没有使用 查询字符串,而是使用了一个由 JSON 构成的请求体,其中使用了 match 查询法,随后我们还将会学习到其他的查询类型。
更加复杂的搜索
接下来,我们再提高一点儿搜索的难度。我们依旧要寻找出姓 Smith 的员工,但是我们还将添加一个年龄大于30岁的限定条件。我们的查询语句将会有一些细微的调整来以识别结构化搜索的限定条件 filter(过滤器):
这一部分的语句是 rangefilter ,它可以查询所有超过30岁的数据 -- gt 代表 greater than (大于)。
这一部分我们前一个操作的 matchquery 是一样的
先不要被这么多的语句吓到,我们将会在之后带你逐渐了解他们的用法。你现在只需要知道我们添加了一个 filter,可以在 match 的搜索基础上再来实现区间搜索。现在,我们的只会显示32岁的名为Jane Smith的员工了:
全文搜索
上面的搜索都很简单:名字搜索、通过年龄过滤。接下来我们来学习一下更加复杂的搜索,全文搜索——一项在传统数据库很难实现的功能。 我们将会搜索所有喜欢 rock climbing 的员工:
你会发现我们同样使用了 match 查询来搜索 about 字段中的 rock climbing。我们会得到两个匹配的文档:
相关评分
通常情况下,Elasticsearch 会通过相关性来排列顺序,第一个结果中,John Smith 的 about 字段中明确地写到 rock climbing。而在 Jane Smith 的 about 字段中,提及到了 rock,但是并没有提及到 climbing,所以后者的 _score 就要比前者的低。