为法语内容配置一个solr。搜索很好,但是当我激活facet搜索时,单词会以特殊方式被截断。
所有这些都消失了,例如汽车而不是汽车,蒙塔尼而不是蒙塔尼,风格而不是风格,homm=
<lst name="keywords">
<int name="automobil">1</int>
<int name="citroen">1</int>
<int name="minist">0</int>
<int name="polit">0</int>
<int name="pric">0</int>
<int name="shinawatr">0</int>
<int name="thailand">0</int>
</lst
这是查询q=fulltextfield: Champpion
关键字内容:
<arr name="keywords">
<str>Ski</str>
<str>sport</str>
<str>Free style</str>
<str>automobile</str>
<str>Rallye</str>
<str>Citroen</str>
<str>montagne</str>
</arr>
这是使用的架构:
<fieldtype name="text_fr" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_fr.txt"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" />
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="French"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_fr.txt"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="French"/>
</analyzer>
</fieldtype>
字段def:
如果有人对这个问题有想法……
谢谢你的回答。问候杰罗姆·朗格
通常,如果要将字段用作facet,则应将其存储为字符串。
您正在标记和过滤字段上刻面,因此各个值是关键字字段中处理过的单词。
以上所说的都是正确的,我只想在一个方面添加一件事。方面的值是索引的术语,而不是存储的术语。对于方面的一个建议是使用字符串类型。这通常是一个不错的选择。但是有时你想对你的方面术语做一些事情。在这种情况下,你可以使用文本类型,但只能轻描淡写地对待输入。在任何情况下,都要避免使用上述的Stemming(雪球搬运工)或WordD的选择。
从KeywordTokenizerFactory开始是一个不错的选择,您可以使用PatternReplace来清理您的术语和输入,并在最后执行TrimFilter。如果您的用户要看到条款,请不要进行低端缩写。
一个例子,我的输入是字母语言代码。PatternReplace清理非字母字符,第二次纠正输入错误:
`
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="([^a-z])"
replacement=""
replace="all" />
<filter class="solr.PatternReplaceFilterFactory"
pattern="fer|xxx"
replacement="und"
replace="all" />
<filter class="solr.LengthFilterFactory" min="3" max="3" />
</analyzer>
`
和索尔玩得开心
奥利弗