2012-10-11 26 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塊必須定義低於這樣的:

<fields> 
.... 
</fields> 

現在您只能在字段collector上搜索,並且您會在任何字段中找到任何文本。

+0

我想我已經定義了一個名爲「text」的「收藏家」字段? :)好吧,我只是從示例schema.xml中複製它。 – user1731299

+0

這是正確的:「文本」是solr示例項目中的等效字段;-) – heinob

+0

如果我想根據哪個字段匹配來調整評分,該怎麼辦? – faridasabry