1

Solr スキーマの設計に関していくつか質問があります。基本的に私は製品カタログ Web サイトの検索エンジンをセットアップしており、テーブルの関係は次のとおりです。

  • 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。私の上級プログラマーは、 を使用して solr を照会するのが好きではCategory Nameなく、代わりに を使用したくありませんCategoryID。彼は保存することを提案して CategoryID_CategoryName (1001_Category XYZ)おり、Web フロントから ID を送信しています。(空白を含む名前が正しく機能しないと仮定します)。

したがって、製品を見つけるには、部分一致をcategories行い、文字列からカテゴリ ID を特定する(fetch 1001 from 1001_Category XYZ) 必要がcategoriesありますcategory_ids。それは私にとってより良い選択肢のようです。

また

一緒に保存するSolr多値フィールドタイプはありCategoryIDますCategoryNameか?

あなたの考えを教えてください、ありがとう。

4

1 に答える 1

3

ご質問への回答。

  1. おそらく - クエリをどのように構築するか、何を検索するか、検索結果で何を取得するかによって異なります。スキーマでは、すべてを保存してインデックスを作成しているため、非常に非効率的です。クエリするものにインデックスを付け、取得/表示するものを保存します。最適化を探している場合は、スキーマで使用されているデータ型を確認します。できる限りソース型にネイティブのままにしてください。
  2. CategoryId によるクエリ - あなたのプログラマーは正しいです。カテゴリ ID でクエリしたいのです。IDと名前を別々のフィールドに保存するというアプローチも正確です。Id ベースのフィールドが整数/倍長であると仮定すると、それらを文字列としてではなく、整数/倍長として構造化する必要があります。
于 2011-04-13T22:54:55.310 に答える