python elasticsearch 入门教程(二) ---全文搜索

截止目前的搜索相对都很简单:单个姓名,通过年龄过滤。现在尝试下稍微高级点儿的全文搜索——一项 传统数据库确实很难搞定的任务。
搜索下所有喜欢攀岩(rock climbing)的雇员:

from elasticsearch import Elasticsearch
es = Elasticsearch()
all_search={
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}
rt2= es.search(index="megacorp", body=all_search)
print(rt2)

显然我们依旧使用之前的 match 查询在about 属性上搜索 “rock climbing” 。得到两个匹配的文档:

{'_shards': {'failed': 0, 'skipped': 0, 'successful': 5, 'total': 5},
 'hits': {'hits': [{'_id': '1',
    '_index': 'megacorp',
    '_score': 0.5753642,
    '_source': {'about': 'I love to go rock climbing',
     'age': 25,
     'first_name': 'John',
     'interests': ['sports', 'music'],
     'last_name': 'Smith'},
    '_type': 'employee'},
   {'_id': '2',
    '_index': 'megacorp',
    '_score': 0.2876821,
    '_source': {'about': 'I like to collect rock albums',
     'age': 32,
     'first_name': 'Jane',
     'interests': ['music'],
     'last_name': 'Smith'},
    '_type': 'employee'}],
  'max_score': 0.5753642,
  'total': 2},
 'timed_out': False,
 'took': 924}

Elasticsearch 默认按照相关性得分排序,即每个文档跟查询的匹配程度。第一个最高得分的结果很明显:John Smith 的 about 属性清楚地写着 “rock climbing” 。
但为什么 Jane Smith 也作为结果返回了呢?原因是她的 about 属性里提到了 “rock” 。因为只有 “rock” 而没有 “climbing” ,所以她的相关性得分低于 John 的。
这是一个很好的案例,阐明了 Elasticsearch 如何 在 全文属性上搜索并返回相关性最强的结果。Elasticsearch中的 相关性 概念非常重要,也是完全区别于传统关系型数据库的一个概念,数据库中的一条记录要么匹配要么不匹配。

你可能感兴趣的:(elasticsearch,Python,操作elastic从入门到精通)