为法语内容配置了solr。搜索很好,但是当我激活方面搜索时,会以特殊方式截断单词。
所有e消失,例如automobil而不是汽车,montagn而不是montagne,styl而不是style,homm => homme等......
<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:champpions&amp; facet = true&amp; facet.field = keywords
关键字内容:
<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:
如果有人对这个问题有所了解......
感谢您的回答。 问候 Jerome longet
答案 0 :(得分:4)
通常,如果要将字段用作构面,则应将其存储为字符串。
您正在对标记化和已过滤字段进行分面,因此各个值是关键字字段中已处理的字词。
答案 1 :(得分:1)
以上所说的都是正确的,我只想在一个方面添加一个方面。构面值是索引术语,而不是存储的术语。 facet的一个建议是使用字符串类型。这通常是一个不错的选择。但有时你会想要对你的方面的一些事情。在这种情况下,您可以使用文本类型,但只能轻轻地处理输入。在任何情况下都要避免使用Stemming(SnowballPorter)或WordDelimiter。
一个很好的选择是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>
`
享受solr的乐趣
奥利弗