【全文搜索选型】全文搜索 PostgreSQL 或 ElasticSearch
如果您需要在PostgreSQL或ElasticSearch中实现全文搜索功能,以下是简单的代码示例。
PostgreSQL 使用 gin 索引
首先,确保您的 PostgreSQL 版本支持全文搜索。然后,创建一个 gin 索引并进行查询:
-- 创建一个带有全文索引的表
CREATE TABLE documents (
id serial PRIMARY KEY,
content text,
search_vector tsvector
);
-- 创建全文索引
CREATE INDEX idx_documents_search_vector ON documents USING gin(search_vector);
-- 为文档的 content 字段生成 tsvector 并插入到 search_vector 字段
INSERT INTO documents (content, search_vector)
VALUES (
'PostgreSQL is a powerful open source object-relational database system',
to_tsvector('english', content)
);
-- 执行全文搜索
SELECT * FROM documents
WHERE search_vector @@ to_tsquery('english', 'PostgreSQL & open');
ElasticSearch 使用 Elasticsearch-DSL
首先,安装 Elasticsearch-DSL 库:
pip install elasticsearch-dsl
然后,使用 Elasticsearch-DSL 定义一个 search 并执行:
from datetime import datetime
from elasticsearch_dsl import Document, Text, Date, Integer, connections
connections.create_connection(hosts=['localhost:9200'])
class MyDocument(Document):
title = Text(fields={'raw': Keyword()})
published_from = Date()
page_count = Integer()
class Index:
name = 'my-index'
# 添加一个文档
MyDocument(
title={'en': 'Elasticsearch: The Definitive Guide'},
published_from=datetime(2015, 5, 1),
page_count=350
).save()
# 执行搜索
s = Search(using='my-index', index='my-index')
s = s.query('match', title__raw='Elasticsearch')
response = s.execute()
for hit in response:
print(hit.title)
在这两个示例中,我们创建了一个表(PostgreSQL)或索引(ElasticSearch),并向其中插入了一些数据。然后,我们执行了全文搜索查询,搜索特定的关键词或短语。这些查询会在文本字段上应用索引,并返回与搜索词匹配的文档。
评论已关闭