努力学习solr

努力学习solr,solr,Solr,我正在重新设计我们公司的一个网站。我的老板想玩弄用搜索框取代所有导航的想法。。搜索框应该能够查询任何不相关数据的表 所以现在我试着用5张桌子 产品 制造商 类别 成分 使用 所以应该能够查找产品名称、制造商名称、类别名称、成分名称或使用名称 当我检索结果时。如果用户单击制造商搜索结果。。它将把他们带到一个制造商页面,该页面查找该制造商的所有产品。 单击产品页面时。。链接将把他们带到实际的产品信息。 配料将把他们带到一个页面,该页面将显示所有含有该配料的产品 无论如何,这是我的数据配置 <d

我正在重新设计我们公司的一个网站。我的老板想玩弄用搜索框取代所有导航的想法。。搜索框应该能够查询任何不相关数据的表

所以现在我试着用5张桌子

产品 制造商 类别 成分 使用

所以应该能够查找产品名称、制造商名称、类别名称、成分名称或使用名称

当我检索结果时。如果用户单击制造商搜索结果。。它将把他们带到一个制造商页面,该页面查找该制造商的所有产品。 单击产品页面时。。链接将把他们带到实际的产品信息。 配料将把他们带到一个页面,该页面将显示所有含有该配料的产品

无论如何,这是我的数据配置

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/xxx" user="xxx" password="xxx" />
    <document>
        <entity name="manufacturer" transformer="TemplateTransformer" pk="manNum"
            query="SELECT manNum, manName FROM manufacturer
                WHERE active = 1">
            <field column="id" name="id" template="MAN-${manNum}" />
            <field column="type" template="manufacturer" name="type"/>
            <field column="manName" name="text"/>       
            <field column="manNum" name="manNum"/>
        </entity>

        <entity name="product" transformer="TemplateTransformer"
            query="SELECT products.prodNum, products.prodName as text, m.manName FROM products  JOIN man m USING (manNum) 
                WHERE products.active = 1
                AND (hideWeb = 0 or hideWeb IS NULL)">
            <field column="id" template="PROD-${products.prodNum}" name="id"/>
            <field column="type" template="product" name="type"/>
            <field column="text" name="text"/>
            <field column="manName" name="manName"/>
        </entity>


        <entity name="ingredients" transformer="TemplateTransformer" pk="id"
            query="SELECT id, text FROM inglist WHERE sort != ''">
            <field column="id" name="id" template="ING-${inglist.id}"/>
            <field column="type" template="ingredient" name="type"/>
            <field column="text" name="text" />
        </entity>

        <entity name="uses" transformer="TemplateTransformer" pk="id"
            query="SELECT id, text FROM useslist">
            <field column="id" name="id" template="USE-${id}"/>
            <field column="type" template="use" name="type"/>
            <field column="text" name="text"/>
        </entity>

        <entity name="categories" transformer="TemplateTransformer" pk="id"
            query="SELECT id, textShow as text FROM categorylist">
            <field column="id" name="id" template="CATEGORY-${id}"/>
            <field column="type" template="category" name="type"/>
            <field column="text" name="text"/>
        </entity>


    </document>
</dataConfig>

还有我的模式

<fields>
    <field name="id" type="string" indexed="true" stored="true"/>
    <field name="text"          indexed="true"  stored="true" type="text"/>
    <field name="type" type="string" indexed="false" stored="true"/>
    <field name="manName" type="text" indexed="false" stored="true"/>
    <field name="manNum" type="string" indexed="false" stored="false"/>
</fields>

现在也许我做这件事的方式不对。。。也许有更好的方法来处理这个问题

无论如何,我现在遇到的问题是,我得到的错误是缺少必需的字段“id”。现在,products query和manufacturer query在select中没有id列。。但是我认为转换查询应该处理它?如果执行此操作,请选择prodNum作为id。。然后所有的ID都会相互覆盖

现在我可以在实际的查询中找到它了。。并将这样做作为最后手段,但我想知道我在这个解决方案中做错了什么

编辑 不管怎样,这只是一个noob问题,出于某种原因,我认为模板变量引用的是SQL中的表名,而不是实体名, 所以我更换了所有的 具有


这个方法很有效。

在特定于表的ID前面加上一个不同的字符或字符串是个好主意。我在SQL中执行此操作,它允许我检查Solr之外的行为

select 
concat('b',cast(b.id as char)) as id,
...
这是一个noob问题

出于某种原因,我认为模板变量引用的是SQL中的表名,而不是实体名。

我这样做:

<entity name="GG-Boryslaw-1939-Phonebook" 
         transformer="TemplateTransformer,DateFormatTransformer"
         pk="id"
         query="SELECT * FROM boryslaw_1939_phonebook">
     <field column="record_id" template="GG-Boryslaw-1939-Phonebook-${GG-Boryslaw-1939-Phonebook.id}" />
     <field column="record_type" template="phonebook" />
     <field column="record_source" template="Boryslaw Phonebook (1939)" />
     <field column="record_date" template="${GG-Boryslaw-1939-Phonebook.Year}" dateTimeFormat="yyyy" />
     ...etc...
</entity>

只是我在这里看到了其他建议使用我的原始方法的解决方案,但无法使其正常工作