2013-11-01 70 views
0

我試圖對我的Solr的系統中運行以下查詢:如何在solr中進行字符串搜索,該字符串搜索允許通配符,空格字符,並且不區分大小寫?

((((subtype:place) AND name:fis*) AND addressPostal:98007) AND addressLine1:14320\ 21*) 

這個查詢是爲了搜索具有名稱fis的前3個字符和地址的前8個字符是商家14320 21

這將返回無匹配。但是,如果我將fis*更改爲Fis*,它會返回正確的匹配項。經過進一步調查,看起來字符串類型是區分大小寫的。

我然後試圖定義我的領域,使他們將不區分大小寫,允許通配符搜索(或至少開始搜索),而不是打破空白。不幸的是我失敗了。

到目前爲止,我已經得到的最接近的是:

<fieldType name="lowerCaseString" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

有了這個,我可以做((((subtype:place) AND name:fis*) AND addressPostal:98007) AND addressLine1:14320*),並得到了正確的比賽,但我不能做地址搜索全部8個字符,由於空間(並且由於大多數地址在第一個空間之前只有幾位數字,所以這是一個主要問題)。

addressLine1搜索也需要不區分大小寫,因爲我需要st == ST == St

我該如何做到這一點?

回答

0

一個簡單的解決方案是將字段的類型保留爲字符串,但將索引數據時的值保持爲小寫。然後小寫來自客戶端的查詢。

1

使用KeywordTokenizerFactory創建文本字段。這個標記器沒有實際的標記,所以整個輸入字符串被保存爲單個標記。所以它會像有一個小寫字符串字段:

<fieldType name="lowerCaseString" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType>