我对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多值字段类型可以将CategoryID
和CategoryName
存储在一起?
让我知道你的想法,谢谢。
答案 0 :(得分:3)
回答你的问题。