如何使用单个Solr实例索引和搜索位于同一数据源中的两个不同表格,或者Solr模板字段无法正常工作。

8
我希望您能够对两个不同的实体进行索引和搜索。
文件名:db-data-config.xml
<dataConfig>
    <dataSource name="myindex" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://test-pc:1433;DatabaseName=SampleDB" user="username" password="password" />
    <document>


     <entity name="Employees" query="select * from employee" transformer="TemplateTransformer" dataSource="myindex">
            <field column="id" name="singlekey" />
            <field column="eId" name="eid" />
            <field column="eName" name="ename" />
            <field column="entity" template="Employee" name="entity" />
    </entity>

    <entity name="Products" query="select * from products" transformer="TemplateTransformer" dataSource="myindex">
            <field column="id" name="singlekey" />
            <field column="pId" name="pid" />
            <field column="pName" name="pname" />
            <field column="entity" template="Product" name="entity" />
    </entity>

</document>

文件名:schema.xml
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="db" version="1.1">
  <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
 </types>
 <fields>

    <!-- Employee -->
    <field name="eid" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
    <field name="ename" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 

    <!-- Products -->
    <field name="pid" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="pname" type="string" indexed="true" stored="true" required="true" multiValued="false" />

    <!--Common fields-->
    <field name="entity" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="singlekey" type="string" indexed="true" stored="true" required="true" multiValued="false" />
</fields>
<uniqueKey>singlekey</uniqueKey>
</schema>

根据下面的链接:
https://dev59.com/IlbTa4cB1Zd3GeqP7yT2
这个问题可以通过使用静态字段(添加新字段 - 这里是'entity')来解决。 但我发现在添加第二个实体后,它甚至无法索引数据。
如下图所示:Multiple entity issue - Template Transformer issue 它能够从SQL Server数据库中获取10条记录,但没有索引0行,也就是没有进行索引过程。 因此甚至无法搜索。 有人能解决这个问题吗? 提前致谢。

有没有解决这个问题的方法? - prem30488
2个回答

1
你的模式中的所有字段都有。
required="true".

你要告诉Solr,每个实体的结果需要拥有eid、ename、pid、pname、entity和singlekey字段。

Employee没有pid或pname字段,因此不应该需要pid和pname。同样,Product没有eid或ename字段,因此不应该需要eid和ename。

移除

required="true".

从pid、pname、eid和ename中可以建立索引。

谢谢,你说得对,这是不索引数据的唯一根本原因。(y) - Sanket Thakkar

-2

你尝试过从管理界面单独索引实体吗?

http://<hostname>:<portnum>/solr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接