如何在Django中使用Elasticsearch进行中文全文搜索(Full Text Search)

2023-04-11 00:00:00 中文 全文 如何在

要在Django中使用Elasticsearch实现中文全文搜索,需要按照以下步骤进行操作:

  1. 安装Python Elasticsearch客户端库:
pip install elasticsearch
  1. 安装Elasticsearch服务器:

在Elasticsearch官网下载,并按照说明进行安装。

  1. 在Django中启用Elasticsearch:

在Django的settings.py中添加以下配置:

# 在Elasticsearch中使用的索引名称
ELASTICSEARCH_INDEX_NAME = 'my_index'

# Elasticsearch连接配置(假设Elasticsearch在本地访问端口为9200)
ELASTICSEARCH_DSL = {
    'default': {
        'hosts': 'localhost:9200'
    }
}
  1. 在Django中定义Elasticsearch索引:

在Django项目的任意可用位置,可以创建一个名为search_indexes.py的新文件,并在其中定义Elasticsearch索引。

例如,以下代码定义名为MyIndex的索引,包含一个字符串类型的title字段和一个body字段:

from elasticsearch_dsl import Document, Text


class MyIndex(Document):
    title = Text()
    body = Text()

    class Index:
        name = ELASTICSEARCH_INDEX_NAME

由于我们想在title字段中搜索“pidancode.com”,在这个例子中我们可以通过给MyIndex添加一些测试数据来演示这个例子。在search_indexes.py中添加以下代码:

from elasticsearch_dsl import connections
from .documents import MyIndex

# 连接到Elasticsearch
connections.create_connection()

# 向索引中添加一些测试数据
my_index = MyIndex(title="pidancode.com is a programming website", body="Welcome to pidancode.com")
my_index.save()
  1. 使用Elasticsearch进行查询:

我们可以使用以下代码从Elasticsearch中搜索“pidancode.com”:

from elasticsearch_dsl import Q, Search

# 创建搜索查询
q = Q('match', title='pidancode.com')

# 创建搜索对象
search = Search(index=ELASTICSEARCH_INDEX_NAME).query(q)

# 执行搜索
response = search.execute()

# 打印结果
for hit in response['hits']['hits']:
    print(hit['_source'])

这将输出以下内容:

{'title': 'pidancode.com is a programming website', 'body': 'Welcome to pidancode.com'}

这就完成了使用Elasticsearch在Django中进行中文全文搜索的示例。

相关文章