2012-08-27 70 views
1

Solr使用Lucene的全文搜索。這是否意味着我必須將所有內容都轉換爲文本? 例如,我有這樣的Fileds:全文搜索意味着將所有內容都轉換爲文本?

<field name="rollno" type="int" indexed="true" stored="true"/> 
    <field name="name" type="string" indexed="true" stored="true"/> 

,並根據這些的Fileds文檔,

<doc> 
     <field name="id">1</field> 
     <field name="rollno">32</field> 
     <field name="name">John Milton</field> 
</doc> 

我必須將它們全部轉換爲文本這樣嗎?

<copyField source="name" dest="text"/> 
<copyField source="rollno" dest="text"/> 

我的搜索處理程序,

<requestHandler name="/select" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <int name="rows">100</int> 
     <str name="df">text</str> 
    </lst> 
</requestHandler> 

請澄清我的疑問。

回答

0

在schema.xml文件中,您設置了defaultSearchField,如果未設置fieldName,默認情況下用於搜索查詢。

<defaultSearchField>text</defaultSearchField> 

在requestHandler的df參數被用於類似的目的。它覆蓋了schema.xml文件中定義的默認字段。

如果使用copyField向此參數添加多個字段,則可以搜索所有字段,而不管其類型。

因此,如下所示創建查詢時,它會在默認字段上進行搜索。

http://localhost:8080/solr/select/?q=searchText 

如果你想在特定領域搜索,那麼你應該創建你的查詢如下。以下查詢將在rollno字段上搜索。

http://localhost:8080/solr/select/?q=rollno:32 
1

您不需要將所有內容都轉換爲文本。

這取決於該領域的內容。
對於內容更多的字段,您通常會使用文本字段類型。
With text field you can a lot handling to make the content searchable
例如
- 可以應用小寫字母過濾器,使搜索不區分大小寫 - 可以應用同義詞來標記同義詞,如車輛,汽車等
- 可以應用Stemming使詞可以通過詞根搜索,例如,銀行銀行等
- 還有更多的字分隔符在& T和AT&T等..

你不想平時一樣anaylsis被應用到各個領域。
例如您不希望將stemmer應用於人名或作者姓名,因爲它可能是不正確的匹配。

對於字段是整數和字符串,您仍然可以搜索它們,而不用將它們標記爲文本,如果字段被索引。

複製字段需要將所有內容複製到單字段類型的字段。
如果您不想使用複製字段,可以使用edismax解析器,並仍在多字段中進行搜索。

<requestHandler name="standard" class="solr.SearchHandler" default="true"> 
    <lst name="defaults"> 
     <str name="defType">edismax</str> 
     <str name="echoParams">explicit</str> 
     <str name="qf">rollno name</str> 
     <str name="q.alt">*:*</str> 
    </lst> 
</requestHandler> 
0

你弄錯了。 copyField不會將其轉換爲文本。它將字段named name中的值複製到名爲text的字段中。這通常用於包含所有值的字段。該字段通常是您的默認搜索字段。讓我解釋爲什麼這樣做:

如果你有你的2字段上面發佈,你必須聲明哪一個是你的默認搜索字段。可以說名字。如果您現在使用正常表達式查詢服務器而不使用任何查詢語法,則只會搜索字段名稱。但通常情況下,您還想讓滾動字段也被搜索到。要做到這一點沒有任何查詢語法你聲明另一個領域,在這種情況下命名文本。現在將字段名稱和字段滾動號的值複製到字段文本中,並將其定義爲默認搜索字段。如果您現在搜索John Milton或42,則會找到該文檔。希望這可以幫助你一點。

相關問題