Apache Solr 构面搜索排除空间

Pan*_*ial 0 php solr facet

我正在使用 Apache Solr 并使用以下查询进行搜索

http://Siteurl:8080/solr/metro/select?q=*:*&rows=0&wt=json&indent=true&facet=true&facet.field=Make
Run Code Online (Sandbox Code Playgroud)

但结果让我们假设我在制造领域有“福特嘉年华”。我得到两个结果而不是一个,如下所示:

Ford => 21
Fiesta => 21
Run Code Online (Sandbox Code Playgroud)

它是按空间分隔字段。

我想要它像

Ford Fiesta => 21
Run Code Online (Sandbox Code Playgroud)

请让我知道这样做的有效方法。

谢谢

小智 5

这里的问题很简单。您正在尝试对标记化字段(文本)进行分面。这意味着每个令牌将被单独计算。我建议您添加新字段(在 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
Run Code Online (Sandbox Code Playgroud)

或者

http://Siteurl:8080/solr/metro/select?q=*:*&rows=0&wt=json&indent=true&facet=true&facet.field=Make_nonTokenized
Run Code Online (Sandbox Code Playgroud)

.

...
<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">
....
Run Code Online (Sandbox Code Playgroud)