创建构面值列表时,我在我的架构中有这个:
<field name="contract_facet_sector_ids" type="text" indexed="true" stored="true" multiValued="true" required="false" />
我要存储的方面是“1_1”,“2_43”,“2_99”等字符串。但是,当我查看facet计数返回的数据时,下划线似乎已被删除:
[facet_fields] => Array
(
[contract_facet_sector_ids] => Array
(
[11] => 0
[243] => 0
[299] => 0
有人可以帮助我解决我在这里出错的地方吗? “text”字段类型的定义如下:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.StopFilterFactory"
ignoreCase="true" words="stopwords.txt"
enablePositionIncrements="true" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1"
catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
<filter class="solr.StopFilterFactory"
ignoreCase="true" words="stopwords.txt"
enablePositionIncrements="true" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="0" catenateNumbers="0"
catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
</analyzer>
</fieldType>
非常感谢提前!
的Seb
答案 0 :(得分:3)
WordDelimiterFilterFactory导致您的下划线被删除。基于以下内容:
将单词拆分为子词并执行可选的转换 子词组。默认情况下,单词被分成子词 遵循规则:
拆分字内分隔符(所有非字母数字字符)。 “Wi-Fi” - &gt; “Wi”,“Fi”
...
根据您使用此字段的说明 - “我要存储的构面是字符串......”。我建议您使用下面定义的string
字段类型(来自Solr示例),除非您确实需要应用其他分析器。
<!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
答案 1 :(得分:1)
Solr的分析页面将向您展示如何在不同的步骤中分析您的文本