2014-12-05 60 views
0

我使用Apache Solr實現,並使用下面的查詢搜索Apache Solr實現面搜索中排除空間

http://Siteurl:8080/solr/metro/select?q=*:*&rows=0&wt=json&indent=true&facet=true&facet.field=Make 

但作爲結果讓假設我有「福特嘉年華」在製造商區域。我得到兩個結果,而不是一個,如下所示:

Ford => 21 
Fiesta => 21 

它是由空間分隔字段。

我希望它像

Ford Fiesta => 21 

請讓我知道有效的方法來做到這一點。

謝謝

+0

嗨 我排序了這一點自己。在Schema.xml文件中,我只需要將Make字段類型設置爲字符串,它之前已添加爲文本 – 2014-12-05 13:07:01

回答

3

問題在這裏很簡單。您正試圖在標記化字段(文本)方面。這意味着每個令牌將被分開計數。我建議你添加新的字段(在schema.xml文件中),你將使用與字段Make相同的數據(例如使用複製字段)來提供。這個新字段應該是帶KeywordTokenizer的字符串或文本。

請看下面的例子。我添加了兩種類型:string和text_not_tokenized。然後定義了兩個字段Make_string和Make_nonTokenized。當小面在他們每個人,你應該看到 「福特嘉年華」

所以,你可以查詢

http://Siteurl:8080/solr/metro/select?q=*:*&rows=0&wt=json&indent=true&facet=true&facet.field=Make_string 

http://Siteurl:8080/solr/metro/select?q=*:*&rows=0&wt=json&indent=true&facet=true&facet.field=Make_nonTokenized 

... 
<fieldType name="string" class="solr.StrField" sortMissingLast="true" /> 
<fieldType name="text_not_tokenized" class="solr.TextField"> 
    <analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
</fieldType> 
... 
<field name="Make_string" type="string"> 
<field name="Make_nonTokenized" type="text_not_tokenized"> 
.... 
+0

感謝您的答案。我遵循同樣的方法,它的工作。 – 2014-12-08 05:26:13