1

我对 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) Schema 是否正确?

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

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

或者

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

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

4

1 回答 1

3

回答您的问题。

  1. 也许 - 这取决于您计划如何构建查询、您打算搜索什么以及您打算在搜索结果中检索什么。在您的模式中,您正在存储和索引所有可能非常低效的东西。索引您打算查询的内容,存储您打算检索/显示的内容。如果您正在寻找优化,我会查看架构中使用的数据类型 - 尽量保持与源类型相同。
  2. 按类别 ID 查询 - 您的程序员是正确的,您想按类别 ID 查询。您将 ID 和名称存储在单独字段中的方法也是准确的。假设您的基于 Id 的字段是整数/长整数,您不想将它们构造为字符串,而是整数/长整数。
于 2011-04-13T22:54:55.310 回答