如何使用单个 solr 实例索引和搜索位于同一数据源中的两个不同表或 Solr 模板字段无法正常工作
Posted
技术标签:
【中文标题】如何使用单个 solr 实例索引和搜索位于同一数据源中的两个不同表或 Solr 模板字段无法正常工作【英文标题】:How to index and search two different tables which are in same datasource using single solr instance Or Solr Template fields not working properly 【发布时间】:2014-04-27 08:47:05 【问题描述】:我想索引和搜索两个不同的实体。
文件名: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://***.com/questions/5636209/how-to-index-and-search-two-different-tables-which-are-in-same-datasource-using 这个问题可以通过使用静态字段来解决(添加新字段 - 这里是它的 'entity')。 但是我看到添加第二个实体后,它甚至无法索引数据。
如下图所示
它能够从 sql server 数据库中获取 10 条记录,但 索引 0 行,意味着没有完成索引过程。 所以连搜索都搜不到。 任何人都可以解决这个问题? 提前致谢。
【问题讨论】:
这个问题的任何解决方法??? 【参考方案1】:架构中的所有字段都有
required="true".
您告诉 Solr,每个实体的结果都需要包含所有 eid、ename、pid、pname、实体和单键字段。
Employee 没有 pid 或 pname 字段,因此不应要求 pid 和 pname。同样,Product 没有 eid 或 ename 字段,因此不应要求 eid 和 ename。
删除
required="true".
来自 pid、pname、eid 和 ename 将允许您建立索引。
【讨论】:
谢谢,你说得对,这是不索引数据的唯一根本原因。 (y)【参考方案2】:您是否尝试过从管理屏幕单独索引您的实体
http://<hostname>:<portnum>/solr
【讨论】:
以上是关于如何使用单个 solr 实例索引和搜索位于同一数据源中的两个不同表或 Solr 模板字段无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章