Open Semantic Search
作者:毫末科技
邮箱:hxg@haomo-studio.com
微信二维码:
1 概述
1.1 技术描述
Open Semantic Search可以搜索以下类型数据:
- 结构化数据。支持的数据库包括:
- MySQL
- MariaDB
- PostgreSQL
- Oracle
- 基于结构化查询语言(SQL)的其他SQL数据库
- JDBC支持的数据库
- ODBC支持的数据库
- Apache Solr支持的数据库
- 开放源代码连接器的数据库
- 非结构化数据
- Microsoft Office文档或OpenOffice文档
- 电子邮件
- CSV
- 文档
- 图像
- 图片
- 视频
- 许多其他文件格式
1.2 技术发展历史
1.3 技术发展趋势
2 技术方案
2.1 方案1:xxxx
2.2 方案2:xxxx
2.3 方案3:xxxx
3 市场应用
3.1 xxx行业应用
3.2 xxx行业应用
3.3 xxx行业应用
4 产品方案对比
4.1 开源方案
4.1.1 开源方案xxx
4.1.2 开源方案xxx
4.2 商业方案
4.1.1 xxx商业项目
4.1.2 xxx商业项目
5 安装和使用
毫末科技测试地址:http://oss.haomo-studio.com/search
5.1 安装
5.1.1 检测安装是否成功
查看以下端口号是否存在:
netstat -plant|grep 8983 # 不存在,则运行service solr start
netstat -plant|grep 80 # 不存在,则运行service apache2 start
netstat -plant|grep 5672 # 不存在,则运行service rabbitmq-server start
netstat -plant|grep 8000 # 不存在,则运行service opensemanticsearch start
netstat -plant|grep 7678 # 不存在,则运行service neo4j start
netstat -plant|grep 9998 # 不存在,则运行service tika start
5.2 使用
5.2.1 Web界面
5.2.1.1 Open Semantic Search界面
http://<ip>/search
毫末科技测试界面:http://oss.haomo-studio.com/search
5.2.1.2 Solr界面
http://<ip>:8983/solr
毫末科技测试界面:http://tentop.com.cn:8983/solr
5.2.2 服务器控制
5.2.2.1 重启服务
service opensemanticsearch restart
5.2.3 索引
索引的命令包括:
opensemanticsearch-index-file
opensemanticsearch-index-web-crawl
opensemanticsearch-delete
opensemanticsearch-index-rss
opensemanticsearch-enrich
opensemanticsearch-index-sitemap
opensemanticsearch-filemonitoring
opensemanticsearch-index-sparql
opensemanticsearch-index-dir
opensemanticsearch-index-web
5.2.3.1 索引文件及目录
在服务器端运行:
etl-file file # 索引文件
etl-file directory # 索引目录
opensemanticsearch-index-dir directory # 索引目录
删除已经索引的文件:
opensemanticsearch-delete --empty # 删除所有的索引
opensemanticsearch-delete file:///directory/file # 删除某个索引文件
5.2.3.2 索引数据库数据
参考:https://www.cnblogs.com/james-roger/p/8903579.html
在服务器端运行:
cd /opt/solr
su solr
bin/solr create -c zjkoa # 此命令将创建目录:/var/solr/data/nextcloud
修改solrconfig.xml
在以下内容前面上加上一个dataimport的处理的Handler
<requestHandler name="/select" class="solr.SearchHandler">
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
<requestHandler name="/select" class="solr.SearchHandler">
并增加数据库索引的jar包:
<lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-.*\.jar" />
在目录/var/solr/data/zjkoa/conf/下增加文件data-config.xml。以下配置为增量索引
<?xml version="1.0" encoding="UTF8" ?>
<dataConfig>
<dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/test" user="root" password="888" batchSize="-1" />
<document name="testDoc">
<entity name="user" pk="id" query="select * from user"
deltaImportQuery="select * from user where id='${dih.delta.id}'"
deltaQuery="select id from user where updateTime> '${dataimporter.last_index_time}'">
<field column="id" name="id"/>
<field column="docFrom" name="docFrom"/>
<field column="docTitle" name="docTitle"/>
<field column="createTime" name="createTime"/>
</entity>
</document>
</dataConfig>
修改同目录下managed-schema,只需要添加自己定义的字段即可。
<field name="id" type="pint" indexed="true" stored="true" required="true" multiValued="false" />
<field name="docFrom" type="string" indexed="true" stored="true" />
<field name="docTitle" type="string" indexed="true" stored="true" />
<field name="createTime" type="pdate" indexed="true" stored="true" />
重启solr,并等待十来分钟:
service solr restart
查看Solr管理界面,对应的collection中的Dataimport是否有内容,如下:
5.2.4 安装插件
毫末科技测试地址:
5.2.5 Restful API
文档地址:https://www.opensemanticsearch.org/doc/admin/rest-api
Open Semantic Search本身的Restful API提供了很少的功能。对于查询的功能,是直接采用solr的Restful API。
curl http://tentop.com.cn:8983/solr/opensemanticsearch/select\?q\=\*:\*
curl http://tentop.com.cn:8983/solr/opensemanticsearch/select\?q\=test
参考:https://www.cnblogs.com/rainbowzc/p/4354224.html
5.2.6 创建查询集合
不同的数据库来源,应该给solr创建不同的collection。例如:给nextcloud创建collection,过程如下:
cd /opt/solr
su solr
bin/solr create -c nextcloud # 此命令将创建目录:/var/solr/data/nextcloud
注意,当创建完collection时,在solr的管理界面将可以看到此collection,且查询的时候,url地址也会发生变化:
curl http://tentop.com.cn:8983/solr/nextcloud/select\?q\=\*:\*
6 FAQ
6.1 Web界面出现错误提示:Apache_Solr_HttpTransportException
- 原因:solr没有启动
- 解决办法: service solr star.注意:当内存较小时,启动很慢(数分钟)。启动后检察8983端口是否存在。t
6.2 运行opensemanticsearch-index-dir directory, Exception while data enrichment of test-file.txt with plugin filter_file_not_modified:
- 原因:solor没有启动
- 解决办法:service solr start。注意:当内存较小时,启动很慢(数分钟)。启动后检察8983端口是否存在。
6.3 运行opensemanticsearch-index-dir directory, export_queue_files: [Errno 111] Connection refused
- 原因:可能是rabbitmq-server没有起来
- 解决办法:service rabbitmq-server start。注意:当内存较小时,启动很慢(数分钟)。启动后检察5672端口是否存在。
6.4 Failed to start LSB: Controls Apache Solr as a Service.
- 原因:可能是内存不足。至少保证有500MB的剩余内存
- 解决办法:使用virsh edit
修改内存,并重启虚拟机。修改以下两行。
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
6.5 在solr的管理界面,菜单Dataimport出现错误:The solrconfig.xml file for this index does not have an operational DataImportHandler defined!
- 原因:
- 解决办法:
6.6 solr -c zjkoa,无法生成collection zjkoa(/var/solr/data/zjkoa无法自动生成)
- 原因:
- 解决办法: