到目前为止搜索都很简单:搜索特定的名字,通过年龄筛选。让我们尝试一种更高级的搜索,全文搜索——一种传统数据库 很难实现的功能。 我们将会搜索所有喜欢“rock climbing”的员工:
GET / megacorp / employee / _search { “query”: { “match”: { “about”: “rock climbing” } } }
{ …“hits”: { “total”: 2, “max_score”: 0.16273327, “hits”: [{ …"_score": 0.16273327, “_source”: { “first_name”: “John”, “last_name”: “Smith”, “age”: 25, “about”: “I love to go rock climbing”, “interests”: [“sports”, “music”] } }, { …"_score": 0.016878016, “_source”: { “first_name”: “Jane”, “last_name”: “Smith”, “age”: 32, “about”: “I like to collect rock albums”, “interests”: [“music”] } }] } }
默认情况下,Elasticsearch根据结果相关性评分来对结果集进行排序,所谓的「结果相关性评分」就是文档与查询条件的匹 配程度。很显然,排名第一的 John Smith 的 about 字段明确的写到“rock climbing”。 但是为什么 Jane Smith 也会出现在结果里呢?原因是“rock”在她的 about 字段中被提及了。因为只有“rock”被提及 而“climbing”没有,所以她的 _score 要低于John。 这个例子很好的解释了Elasticsearch如何在各种文本字段中进行全文搜索,并且返回相关性最大的结果集。相关性 (relevance)的概念在Elasticsearch中非常重要,而这个概念在传统关系型数据库中是不可想象的,因为传统数据库对记录的 查询只有匹配或者不匹配。
|