Solr - 查询所有字段的最佳实践

17

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中更改什么吗?

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 上搜索,您将找到任何字段中的任何文本。


我想我已经定义了一个名为“text”的“collector”字段? :) 好吧,我只是从示例schema.xml中复制了它。 - user1731299
没错:在solr示例项目中,“text”是等价的字段;-) - heinob
如果我想根据匹配哪个字段来调整评分,该怎么做? - faridasabry
@user1925930:实际上我不知道这是否可能。我认为不行,但你最好为此提出一个单独的问题。 - heinob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接