Open Semantic Search

官网:https://haomo-tech.com

作者:毫末科技

邮箱:hxg@haomo-studio.com

微信二维码:

1 概述

1.1 技术描述

Open Semantic Search可以搜索以下类型数据:

  • 结构化数据。支持的数据库包括:
    • MySQL
    • MariaDB
    • PostgreSQL
    • Oracle
    • 基于结构化查询语言(SQL)的其他SQL数据库
    • JDBC支持的数据库
    • ODBC支持的数据库
    • Apache Solr支持的数据库
    • 开放源代码连接器的数据库
  • 非结构化数据
    • Microsoft Office文档或OpenOffice文档
    • PDF
    • 电子邮件
    • 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

网址:https://github.com/xxx

4.1.2 开源方案xxx

网址:https://github.com/xxx

4.2 商业方案

4.1.1 xxx商业项目

网址:http://xxx.com/

4.1.2 xxx商业项目

网址:http://xxx.com/

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无法自动生成)

  • 原因:
  • 解决办法:

7 参考资料

results matching ""

    No results matching ""