注意:仅供参考,为大家提供一点帮助,文中有很多可以优化的地方,鉴于个人精力,时间有限,写的项目能将就完成课程设计
gitee:SearchEngine: 互联网搜索引擎大作业 (gitee.com)
要求:
(一) 建立并实现文本搜索功能
◼ 利 用 / 调 用 开 源 搜 索 引 擎 Lucene(Apache Lucene - Welcome to Apache Lucene), ElasticSearch(Elasticsearch:官方分布式搜索和分析引擎 | Elastic) 或 者 Lemur(Lemur Project Home)实现文本搜索引擎。查阅相关资料,安装软件。
◼ 对经过预处理后的500个英文和中文文档/网页建立搜索并实现搜索功能。
◼ 通过上述软件对文档建立索引(Indexing),然后通过前台界面或者已提供的界 面,输入关键字,展示搜索结果。
◼ 前台可通过网页形式、应用程序形式、或者利用已有的界面工具显示。
◼ 实现英文搜索及中文搜索功能。
(二) 比较文档之间的相似度
◼ 通过余弦距离(Cosine Distance)计算任意两个文档之间的相似度,列出文档原文,并给出相似度值。
◼ 尝试实现一个文档查重程序。
(三) 对下载的文档,利用K-Means聚类算法进行聚类。
◼ 将下载的500个中文/英文文档聚为20个类,并显示聚类之后所形成的三个最大的类,及每个类中代表性的文档(即,离类中心最近的五个文档)。
◼ 将文档分别聚类成不同数量的类,如:5、10、25、50等,比较聚类结果的异同与变化。
◼ 距离计算公式,可采用余弦距离,也可用欧式距离。
一、建立并实现文本搜索功能
1.1.开发环境搭建
使用Elasticsearch实现全文内容检索
Elasticsearch
是一个开源的搜索文献的引擎,大概含义就是你通过Rest
请求告诉它关键字,他给你返回对应的内容,就这么简单。
Elasticsearch
封装了Lucene
,Lucene
是apache
软件基金会一个开放源代码的全文检索引擎工具包。Lucene
的调用比较复杂,所以Elasticsearch
就再次封装了一层,并且提供了分布式存储等一些比较高级的功能。
基于Elasticsearch
有很多的插件,我这次用到的主要有两个,一个是kibana
,一个是Elasticsearch-head
。
1.1.1.软件下载及配置
-
安装
Elasticsearch
版本为7.17.3
【网址】Past Releases of Elastic Stack Software | Elastic
-
使用内置的jdk,配置环境变量ES_JAVA_HOME
-
进入
config
目录--->
打开elasticsearch.yml
文件(虚拟机访问就必须要修改,主机可以不用修改)
-
windows下启动Elasticsearch服务,直接运行bin目录下的Elasticsearch.bat文件
-
判断ES是否启动成功,直接访问 http://localhost:9200/
-
安装kibana(7.17.3)
【kibana】Past Releases of Elastic Stack Software | Elastic
-
运行bin目录下的kibana.bat文件
-
【访问网址】http://localhost:5601/
1.2.在Python中与Elasticsearch进行交互
-
在Python中与Elasticsearch进行交互,需要安装Elasticsearch-py
pip install elasticsearch
-
编写python代码:
-
main.py处理英文文档
from elasticsearch import Elasticsearch import os import json from datetime import datetime # 创建 Elasticsearch 客户端实例 es = Elasticsearch([{'host': 'localhost', 'port': 9200, 'scheme': 'http'}]) # 创建索引 def create_index(index_name): index_mapping = { "mappings": { "properties": { "title": {"type": "keyword"}, "contents": {"type": "text"}, "indexdate": {"type": "date"} } } } es.indices.create(index=index_name, body=index_mapping) # 导入数据 def ind
-