16

schema.xml スニペット:

   <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"/>

ここで、「hello」などのすべてのフィールド (「id」と「table_type」を除く) を検索したいと考えています。どうすればこれを行うことができますか?私は本当に次のように書く必要がありますか?

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

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

4

1 に答える 1

22

最善の解決策は、このようなすべてのフィールドのデータを収集するフィールドを構築することです

<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ブロックは次のように定義する必要があることに注意してください。

<fields>
....
</fields>

これで、フィールドでのみ検索できcollector、任意のフィールドに任意のテキストが表示されます。

于 2012-10-11T07:01:46.447 に答える