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

现在我想在所有字段(“id”和“table_type”除外)中搜索“hello”。我怎么能做到这一点?我真的必须写以下内容吗?

/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 回答