2012-10-11 6 views
16

のschema.xmlはスニペット:のSolr - すべてのフィールドを超えるクエリは、ベストプラクティス

<field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <field name="notes" type="text_general" indexed="true" stored="true"/> 
    <field name="missionFocus" type="text_general" indexed="true" stored="true"/> 
    <field name="name" type="text_general" indexed="true" stored="true"/> 
    <field name="first_name" type="text_general" indexed="true" stored="true"/> 
    <field name="last_name" type="text_general" indexed="true" stored="true"/> 
    <field name="about_me" type="text_general" indexed="true" stored="true"/> 
    <field name="message" type="text_general" indexed="true" stored="true"/> 
    <field name="title" type="text_general" indexed="true" stored="true"/> 
    <field name="table_type" type="string" indexed="true" stored="true"/> 

    <field name="text" type="text_general" indexed="true" stored="false" 
      multiValued="true"/> 

は今、私はすべてのフィールドで検索するなどのために(「ID」と「TABLE_TYPE」を除きます) "こんにちは"。どのように私はこれを行うことができますか?私は本当に次のように書く必要がありますか?

/solr/select/?q=notes:hello missionFocus:hello name:hello first_name:hello .. 

DisMaxRequestHandlerについて聞いたことがありますが、このハンドラでどのようにクエリする必要がありますか?そのためにsolrconfig.xmlで何かを変更する必要がありますか?

答えて

21

最善の解決策は、フィールドを構築することです、この

<field 
    name="collector" 
    type="text_general" 
    indexed="true" 
    stored="false" 
    multiValued="true" 
/> 

のようなすべてのフィールドのデータを収集し、あなたが今しなければならない唯一の事は、そのフィールドにすべてのフィールドの内容をコピーし、次のとおりです。

<copyField source="notes"  dest="collector"/> 
<copyField source="missionFocus" dest="collector"/> 
<copyField source="name"   dest="collector"/> 
.... 

copyFieldブロックがこのBELOW を定義する必要があることに注意してください:

<fields> 
.... 
</fields> 

フィールドcollectorでしか検索できず、いずれのフィールドにもテキストがあります。

+0

「テキスト」という名前の「コレクタ」フィールドを既に定義していると思いますか? :)まあ、私はそれをexample.xmlからコピーしました。 – user1731299

+0

そうです:「テキスト」はソルアーの例プロジェクトの同等のフィールドです; – heinob

+0

フィールドの一致に基づいて得点を微調整したいのですが? – faridasabry