返回介绍

Elasticsearch 入门

发布于 2025-01-02 21:53:57 字数 3159 浏览 0 评论 0 收藏 0

我将在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文