2012-01-27 6 views
0

私のSolrエンジンでMySQLデータベースのいくつかのデータをインデックスに登録しました。私は、フィールド名と一緒にキーワードを検索したときには正常に動作します:「Q = texted_value:車は、」私のdbレコードSolrのクロスフィールドDIHインデックスデータの検索

<doc><str name="id">6</str><str name="texted_value">car</str></doc> 

を返します。しかし、私は与えることなく、私のDBにフルテキスト検索を実行できるようにする必要がありますフィールド名(q = car)。それではどうやってやるの?それがTransformerまたはProcessorをデータコンフィグに含めているなら、私を案内してくれますか?

私のデータ-config.xmlに:Solrの中のフィールド全体で検索するために使用

<entity name="test0" 
pk="id" 
query="select * from test0"> 
<field column="value_t" name="texted_value" /> 
</entity> 

Thxを

+0

ええと、あなたは心の中で(フィールドと)クエリの種類がありますか?いくつか例を挙げてください。 1つのクエリで複数のフィールドを検索する必要があると言っていますか? – aitchnyu

答えて

2

一般的な技術はcopyFieldディレクティブを使用することです。元のフィールドから宛先フィールドに値がコピーされます。通常はノルムが格納されていない状態で索引付けされます。

<copyField source="columnA" dest="textAll" maxChars="20" /> 
<copyField source="columnB" dest="textAll" maxChars="20" /> 
<copyField source="columnC" dest="textAll" maxChars="20" /> 
.... 

今、あなたはHTTP検索することができ、あなたのschema.xmlにデフォルトのフィールドとして

<defaultSearchField>textAll</defaultSearchField> 

textAllフィールドを作成します://サーバー/ Solrの/選択/ Q =車これはすべてのあなたの全体で検索しますか?フィールド。これにより、各フィールドを個別に検索するのではなく、1つのフィールドを検索する代わりに検索のパフォーマンスが向上しますtextAll。これは、インデックス時間の増加の価格&ファイルサイズに付属しています。

読むSolr copyFields

+0

thx、それは素晴らしい仕事です! – zg2pro

0

あなたはDisMax Query Parserで検索可能な列を指定することができます。 copyFieldも動作しますが、スキーマの変更が必要です。両方とも状況に応じて良いオプションです。

**?Q =車& QF = column1のcolumn2の& DEFTYPE = dismax

//search for the word "car" 
    ?q=car 

    //specify all the columns to search in 
    &qf=column1 column2 

    //use dismax 
    &defType=dismax