Solr架构设计

时间:2011-04-13 10:41:08

标签: solr solrnet

我对solr架构设计有一些疑问。基本上我正在为产品目录网站设置搜索引擎,我的表关系如下。

  • Product属于Merchant
  • Product属于Brand
  • Product拥有并属于许多Categories
  • Category有很多Sub Categories
  • Sub Category有很多Types
  • Type有很多Sub Types

到目前为止,我的Schema.xml看起来像这样。

<field name="product_id" type="string" indexed="true" stored="true" required="true" /> 
<field name="name" type="string" indexed="true" stored="true"/>
<field name="merchant" type="string" indexed="true" stored="true"/>
<field name="merchant_id" type="string" indexed="true" stored="true"/>
<field name="brand" type="string" indexed="true" stored="true"/>
<field name="brand_id" type="string" indexed="true" stored="true"/>
<field name="categories" type="string" multiValued="true" indexed="true" stored="true"/>
<field name="sub_categories" type="string" multiValued="true" indexed="true" stored="true"/>
<field name="types" type="string" multiValued="true" indexed="true" stored="true"/>
<field name="sub_types" type="string" multiValued="true" indexed="true" stored="true"/>
<field name="price" type="float" indexed="true" stored="true"/>
<field name="description" type="text" indexed="true" stored="true"/>
<field name="image" type="text" indexed="true" stored="true"/>

<field name="text" type="text" indexed="true" stored="false" multiValued="true"/>

<uniqueKey>product_id</uniqueKey>

<defaultSearchField>text</defaultSearchField>

<solrQueryParser defaultOperator="OR"/>

<copyField source="name" dest="text"/>
<copyField source="merchant" dest="text"/>
<copyField source="brand" dest="text"/>
<copyField source="categories" dest="text"/>
<copyField source="sub_categories" dest="text"/>
<copyField source="types" dest="text"/>
<copyField source="sub_types" dest="text"/>

现在我的问题:

1)架构是否正确?

2)我们假设我需要找到Category XYZ的产品。我的高级程序员不喜欢Category Name查询solr,而是不想使用CategoryID。 他建议存储CategoryID_CategoryName (1001_Category XYZ),并从网络前端发送ID。 (假设带有空格的名称无法正常工作)。

为了找到产品,我应该对categories进行部分匹配,并从字符串中识别类别ID,(fetch 1001 from 1001_Category XYZ) 要么 如果我将名称保留在categories字段并为category_ids设置另一个字段,该怎么办?对我来说这似乎是一个更好的选择。

是否有任何Solr多值字段类型可以将CategoryIDCategoryName存储在一起?

让我知道你的想法,谢谢。

1 个答案:

答案 0 :(得分:3)

回答你的问题。

  1. 可能 - 这取决于您计划构建查询的方式,您打算搜索的内容以及您打算在搜索结果中检索的内容。在您的架构中,您正在存储&amp;索引所有可能效率很低的东西。索引您要查询的内容,存储您要检索/显示的内容。如果您正在寻找优化,我会检查模式中使用的数据类型 - 尝试尽可能保持原始类型的源类型。
  2. 按CategoryId查询 - 您的程序员是正确的,您想按类别ID查询。您在单独的字段中存储ID和名称的方法也是准确的。假设您的基于Id的字段是整数/长整数,您不希望将它们构造为字符串而是整数/长整数。