答案是使用Python构建小型搜索引擎需实现倒排索引、查询处理和排序。首先通过re和defaultdict提取文档关键词并建立词到文档的映射;接着解析用户查询,取关键词交集实现AND逻辑;然后按词频打分并排序提升相关性;最后可借助Whoosh或Meilisearch等工具增强功能。核心在于索引、检索与排序协同,细节如分词质量影响效果。

在Python中实现搜索引擎功能,核心是构建一个能对文本数据进行索引、检索和排序的小型系统。虽然无法与Elasticsearch或Google这类大型引擎相比,但用Python可以快速搭建一个基础但实用的搜索引擎,适合文档检索、网站搜索等场景。
倒排索引是搜索引擎的核心结构,它记录每个词出现在哪些文档中。
示例:
import re
from collections import defaultdict
<h1>模拟文档库</h1><p>documents = {
1: "python programming language",
2: "python data science",
3: "web development with python",
4: "machine learning in python"
}</p><h1>构建倒排索引</h1><p>index = defaultdict(set)
for doc_id, text in documents.items():
words = re.findall(r'\b\w+\b', text.lower())
for word in words:
index[word].add(doc_id)</p>这样,index['python'] 就会返回包含该词的所有文档ID。
立即学习“Python免费学习笔记(深入)”;
支持关键词查询,比如用户输入“python data”,返回同时包含这两个词的文档。
def search(query):
words = re.findall(r'\b\w+\b', query.lower())
results = None
for word in words:
if word in index:
if results is None:
results = index[word]
else:
results = results & index[word] # 取交集(AND 查询)
else:
return set() # 任一词不存在则无结果
return results or set()
调用 search("python data") 会返回 {2},即第二篇文档匹配。
系统特点:功能简洁实用。目前互联网上最简洁的企业网站建设系统!原创程序代码。非网络一般下载后修改的代码。更安全。速度快!界面模版分离。原创的分离思路,完全不同于其他方式,不一样的简单感受!搜索引擎优化。做了基础的seo优化。对搜索引擎更友好系统功能关于我们:介绍企业介绍类信息,可自由添加多个介绍栏目!资讯中心:公司或行业资讯类内容展示。可自由添加多个资讯内容!产品展示:支持类别设置,可添加产品图片
0
更合理的做法是按匹配词的数量或TF-IDF评分排序。
简单词频打分示例:
def search_ranked(query):
words = re.findall(r'\b\w+\b', query.lower())
scores = defaultdict(int)
for word in words:
if word in index:
for doc_id in index[word]:
scores[doc_id] += 1
# 按得分降序排列
return sorted(scores.items(), key=lambda x: x[1], reverse=True)
结果返回 (文档ID, 匹配次数),便于展示最相关的在前面。
如果需要更强功能,推荐使用专用库:
例如用Whoosh创建索引:
from whoosh.index import create_in
from whoosh.fields import Schema, TEXT, ID
import os
<p>schema = Schema(title=TEXT(stored=True), content=TEXT)
if not os.path.exists("indexdir"):
os.mkdir("indexdir")
ix = create_in("indexdir", schema)</p><p>writer = ix.writer()
writer.add_document(title="Python Intro", content="Learn python programming")
writer.commit()</p><p>with ix.searcher() as searcher:
from whoosh.query import *
query = Term("content", "python")
results = searcher.search(query)
for r in results:
print(r["title"])</p>基本上就这些。从零实现可用倒排索引+查询逻辑,适合学习和小项目;实际生产建议用Whoosh或Meilisearch,省时高效。关键是理解索引、查询、排序这三个环节如何协同工作。不复杂但容易忽略细节,比如分词质量和去停用词会影响效果。
python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号