0

私は、当社の会社のサイトの 1 つを再設計中です。上司は、すべてのナビゲーションを検索ボックスに置き換えるというアイデアをいじりたがっています。検索ボックスは、関連のないデータのテーブルを照会できる必要があります。

だから今私は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 列がありません..しかし、変換クエリがそれを処理する必要があると思いましたか? select prodNum as id .. を実行すると、すべての ID が互いに上書きされます。

これで、おそらく実際のクエリで連結できます..最後の手段として連結しますが、このソリューションで何が間違っているのか知りたいです。

編集 気にしないでください、それは単なる初心者の問題でした。何らかの理由で、テンプレート変数がエンティティ名ではなく SQL のテーブル名を参照していると考えていたので、すべてを With に置き換えました

そしてそれはうまくいきました。

4

3 に答える 3

0

テーブル固有の ID の前に個別の文字または文字列を付けることをお勧めします。これを SQL で行うので、Solr の外部で動作を確認できます。

select 
concat('b',cast(b.id as char)) as id,
...
于 2012-06-08T21:48:30.407 に答える
0

それはnoobの問題でした、

何らかの理由で、テンプレート変数がエンティティ名ではなく SQL のテーブル名を参照していると考えていました。

于 2012-06-10T18:31:11.737 に答える
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>
于 2012-06-11T18:56:20.300 に答える