solr facet搜索截断词

时间:2012-10-02 20:37:12

标签: solr truncate faceted-search

为法语内容配置了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

2 个答案:

答案 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的乐趣

奥利弗