Elasticsearch 入门
我将在 Python shell 中为你展示使用 Elasticsearch 的基础知识。 这将帮助你熟悉这项服务,以便了解稍后将讨论的实现部分。
要建立与 Elasticsearch 的连接,需要创建一个 Elasticsearch
类的实例,并将连接 URL 作为参数传递:
>>> from elasticsearch import Elasticsearch
>>> es = Elasticsearch('http://localhost:9200')
Elasticsearch 中的数据需要被写入 索引 中。 与关系数据库不同,数据只是一个 JSON 对象。 以下示例将一个包含 text
字段的对象写入名为 my_index
的索引:
>>> es.index(index='my_index', doc_type='my_index', id=1, body={'text': 'this is a test'})
如果需要,索引可以存储不同类型的文档,在本处,可以根据不同的格式将 doc_type
参数设置为不同的值。 我要将所有文档存储为相同的格式,因此我将文档类型设置为索引名称。
对于存储的每个文档,Elasticsearch 使用了一个唯一的 ID 来索引含有数据的 JSON 对象。
让我们在这个索引上存储第二个文档:
>>> es.index(index='my_index', doc_type='my_index', id=2, body={'text': 'a second test'})
现在,该索引中有两个文档,我可以发布自由格式的搜索。 在本例中,我要搜索 this test
:
>>> es.search(index='my_index', doc_type='my_index',
... body={'query': {'match': {'text': 'this test'}}})
来自 es.search()
调用的响应是一个包含搜索结果的 Python 字典:
{
'took': 1,
'timed_out': False,
'_shards': {'total': 5, 'successful': 5, 'skipped': 0, 'failed': 0},
'hits': {
'total': 2,
'max_score': 0.5753642,
'hits': [
{
'_index': 'my_index',
'_type': 'my_index',
'_id': '1',
'_score': 0.5753642,
'_source': {'text': 'this is a test'}
},
{
'_index': 'my_index',
'_type': 'my_index',
'_id': '2',
'_score': 0.25316024,
'_source': {'text': 'a second test'}
}
]
}
}
在结果中你可以看到搜索返回了两个文档,每个文档都有一个分配的分数。 分数最高的文档包含我搜索的两个单词,而另一个文档只包含一个单词。 你可以看到,即使是最好的结果的分数也不是很高,因为这些单词与文本不是完全一致的。
现在,如果我搜索单词 second
,结果如下:
>>> es.search(index='my_index', doc_type='my_index',
... body={'query': {'match': {'text': 'second'}}})
{
'took': 1,
'timed_out': False,
'_shards': {'total': 5, 'successful': 5, 'skipped': 0, 'failed': 0},
'hits': {
'total': 1,
'max_score': 0.25316024,
'hits': [
{
'_index': 'my_index',
'_type': 'my_index',
'_id': '2',
'_score': 0.25316024,
'_source': {'text': 'a second test'}
}
]
}
}
我仍然得到相当低的分数,因为我的搜索与文档中的文本不匹配,但由于这两个文档中只有一个包含“second”这个词,所以不匹配的根本不显示。
Elasticsearch 查询对象有更多的选项,并且很好地进行了 文档化 ,其中包含诸如分页和排序这样的和关系数据库一样的功能。
随意为此索引添加更多条目并尝试不同的搜索。 完成试验后,可以使用以下命令删除索引:
>>> es.indices.delete('my_index')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论