2012-06-08 85 views
0

我正在重新设计我们的公司网站之一。我的老板想要玩弄用搜索框替换我们所有导航的想法..搜索框应该能够查询我们的任何无关数据表。努力学习Solr

所以现在我试着用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”。现在产品查询和制造商查询没有在选择ID列...但我认为变换查询应该照顾它?如果我选择prodNum作为ID ..那么所有的ID都会覆盖对方。

现在我可以在实际查询中连接它,并且将作为最后一招,但想知道我在做什么错误的解决方案。

编辑 没关系,这只是一个小白的问题,由于某种原因,我在想,模板变量是指的表名在SQL不是实体名称, 所以我全部换成了 的与

它的工作。

回答

0

这是一个小白问题,

由于某种原因,我在想,模板变量是指的表名在SQL不是实体名称。

0

使用不同的字符或字符串来为表特定的ID添加前缀是个不错的主意。我在SQL中这样做,它允许我检查Solr之外的行为。

​​
+0

这只是我已经在这里用我原来的方法暗示见过其他的解决方案,但不能让它工作 – Kris

0

我不喜欢这样写道:

<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>