如何正确配置Solr以索引我的Oracle数据库?

时间:2015-06-15 04:19:41

标签: oracle solr lucene

我一直在尝试将 Solr 配置为使用 Oracle 11.2 数据库作为数据源,但无效。我已经彻底探讨了这些文件,似乎缺乏一份好的工作指南。

对于一个简单的场景,我想索引我的单个表[topic]

我的表 主题 的结构如下所示:

  
      
  • ID(自动编号)
  •   
  • 主题(varchar 50) 我想将此作为索引
  •   
  • 信息(varchar 255) 我想将此作为索引
  •   

我的solr配置(到目前为止)

我为此Oracle添加了一个新集合,将其命名为 " oracle_test" 。因此,我按照此集合的官方文档指导配置文件夹结构,如下所示:

  • 〜/ solr的/服务器/ solr的/
    • oracle_test
      • CONF
        • 数据-config.xml中
        • elevate.xml
        • schema.xml中
        • solrconfig.xml中

数据-config.xml中

我已经为我的Oracle配置了一个工作数据源连接字符串,指定了我的 主题 表的查询,以及我希望Solr查找的字段。

<dataConfig>
    <dataSource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:system@//127.0.0.1:1521/orcl/" user="system" password="*****"/>
    <document>
        <entity name="help" query="select \"topic\",\"info\" from \"topic\"" dataSource="jdbc">
            <field column="topic" name="topic"/>
            <field column="info" name="info"/>
        </entity>
    </document>
</dataConfig>

schema.xml中

我把字段的定义放在这里。

<schema name="oracle_help" version="1.1">
    <fieldType name="string" class="solr.StrField"/>
    <field name="topic" type="string" indexed="true" stored="true" multiValued="false"/>
    <defaultSearchField>info</defaultSearchField>
    <field name="topic" type="string" indexed="true" stored="true"/>
    <field name="info" type="string" indexed="true" stored="true"/>
</schema>

solrconfig.xml中

由于配置文件很大并且包含所有内容。我将仅从该配置文件中摘录一些与Oracle配置相关的摘录,如下所示:

我指定了我希望它索引的字段(主题):

<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
    <lst name="defaults">
       <str name="df">topic</str>
    </lst>
</initParams>

processor 部分下,我只有一个默认字段类型定义为字符串:

<processor class="solr.AddSchemaFieldsUpdateProcessorFactory">
  <str name="defaultFieldType">strings</str>
  ...
</processor>

然后我尝试通过Solr Admin

导入数据源

使用&#34; DataImport&#34;在Solr Admin仪表板上,一旦执行命令,我得到了这个回复,我不确定它是否正确索引了我的Oracle表:

{
    "responseHeader": {
    "status": 0,
    "QTime": 1
},
"initArgs": [
    "defaults",
    [
        "config",
        "data-config.xml"
    ]
],
"command": "status",
"status": "idle",
"importResponse": "",
"statusMessages": {}
}

奇怪的是,状态表示为&#34;空闲&#34;。

我尝试执行搜索查询,但返回错误

使用搜索查询&#34; test&#34;如下:

$> curl http://localhost:8983/solr/oracle_test/select?q=test&wt=json&indent=true

Solr返回我&#34;未定义的字段主题&#34;。

{
    "responseHeader": {
    "status": 400,
    "QTime": 1,
    "params": {
        "q": "called",
        "indent": "true",
        "wt": "json",
        "_": "1434341618019"
    }
},
"error": {
   "msg": "undefined field topic",
   "code": 400
  }
}

但是,如前面部分所示,显然我已经定义了字段&#34; topic&#34;在我的schema.xml中。 Solr官方网站似乎缺乏文档或指南,我尝试在互联网上做一些研究,但我一点都没有。

任何可能熟悉Solr - Oracle集成的人都可以帮我解决这个问题吗?有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我认为您的Solr服务器应该在启动时或者您尝试访问使用已定义的schema.xml的索引时生成错误。请查看solr服务器的日志。

它有正式错误,这些会阻止索引启动,反过来又会阻止你从运行

中定义的DIH
    字段类型周围缺少
  • <types />
  • <fields />在您的字段周围丢失
  • <defaultSearchField />错位在您的字段中
  • 您已定义名为topic两次的字段

schema.xml is documented in Solr's Wiki的结构。 schema.xml的有效版本如下所示。

<schema name="oracle_help" version="1.1">
  <types>
    <fieldType name="string" class="solr.StrField"/>
  </types>

  <defaultSearchField>info</defaultSearchField>

  <fields>
    <field name="topic" type="string" indexed="true" stored="true" multiValued="false"/>
    <field name="info" type="string" indexed="true" stored="true"/>
  </fields>
</schema>

答案 1 :(得分:0)

您使用的方法似乎没问题。在solrConfig.xml中尝试使用下面的行

<str name="config">/path/to/my/DIHconfigfile.xml</str>

而不是<str name="df">topic</str>