2014-12-05 45 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