2012-03-05 13 views
2

私はApache Solrを使用しています。次のシナリオがあります。同じSolrコアの複数のインデックス..?

私はPostGreSQLデータベースに2つのテーブルを持っています。 1つは「」です。その他は "ディーラー"

ある今、私は次のように車用のデータ-configファイルを持っている:

<document name="offerings"> 
    <entity name="jc_offerings" query="select * from jc_offerings" > 
     <field column="id" name="id" /> 
     <field column="name" name="name" /> 
     <field column="display_name" name="display_name" /> 
     <field column="extra" name="extra" /> 
    </entity> 
</document> 

私は、同様のデータがある - コンフィグを。 "ディーラー"のxml。それは車と同じフィールドがあります。名、余分ななど私のSchema.xmlで今

、私は次のフィールドを定義している:

<fields> 
    <field name="id" type="string" indexed="true" /> 
    <field name="name" type="name" indexed="true" /> 
    <field name="extra" type="extra" indexed="true" /> 

    <field name="CarsText" type="text_general" indexed="true" 
    stored="true" multiValued="true"/> 
</fields> 

<uniqueKey>id</uniqueKey> 
<defaultSearchField>CarsText</defaultSearchField> 
<copyField source="name" dest="CarsText"/> 
<copyField source="extra" dest="CarsText"/> 

は、今私は次のように検索したい:「名前がどこにありますかMaruti ".. Solrが検索するかどうかを知る方法::: Carsフィールド:名前またはディーラーフィールド" name ".. ??

私は、次のリンクを読んだことがある:http://wiki.apache.org/solr/MultipleIndexes

しかし、私は作品がどのように理解することはできませんよ...?そのリンクを読んだ後

<field name="type" value="car" /> : in Cars date-config.xml 

<field name="type" value="dealer" /> : in Cars date-config.xml 
:私は* ..マイディーラー * データ-config.xmlのでのようなものを別のフィールドを作りました

そしてSchema.xmlで私は新しいフィールドを作成しました:

<field name="type" type="string" indexed="true" stored="true" /> 

し、私のようなもの照会..

localhost:8983/solr/select?q=name:Maruti&fq=type:dealer

をしかし、それが働いたくぼみ!!

どうすればいいですか?

答えて

5

フィールドは車やディーラーの両方で同じである場合、あなたはそのように定義されたオブジェクトを一つのインデックスを使用することができます。

<fields> 
    <field name="id" type="string" indexed="true" stored="true"/> 
    <field name="name" type="name" indexed="true" stored="true" /> 
    <field name="extra" type="extra" indexed="true" stored="true" /> 
    <field name="description_text" type="text_general" indexed="true" stored="true" multiValued="true"/> 
    <field name="type" type="string" indexed="true" stored="true" /> 
</fields> 

これは車やディーラーの両方のために動作します(あなたがする必要はありません2つのインデックスを持つ)、 "ディーラー"や "車"(私は同じシステムを使って同様のタイプのオブジェクトをマイナーな "

また、検索するフィールドにstored = "true"を追加する必要があります。そうしないと、検索にのみ使用できます(したがって、index = "true")

+0

あなたは私の質問を丁寧に読んだのですか?私はすでにこれを行っていますが、事実は:それは動作していません。タイプを問うときに何も結果には出ません。私は何をすべきか ?? –

+0

完全な英語ではなくても、あなたの質問を丁寧に読んでいます。あなたが理解できる限り、あなたはまだ複数のインデックスを持っています。私の例に従って、すべてを1つのインデックスにマージする必要があります。フィールド "タイプ"には2つのデフォルト値があり、2つのインデックス間で分割されます。また、あなたは "Maruti"と何も出力しませんでした。 –

+0

あなたの例では:あなたが "fq = type:Samuele"と書く場合、あなたは "type" field..nowを言いました..何が起きますか.. ?? ..どこかでタイプを定義する必要があります。 "..そしてSOLRは、いくつのタイプが利用可能であるかを知ることができるはずです。あなたはそれを達成しましたか? –

2

タイプフィールドにデフォルト値を追加すると、タイプ値がcars|dealerに設定されます。

ソースを別々に索引付けする必要があります。コピーフィールドを使用して、cars|dealerのいずれかで簡単にフィルタリングできます。

これはややこしいと思われ、上記のmuti-indexesリンクではうまく説明されていません。