【问题标题】:solr facet search truncate wordssolr facet search 截断单词
【发布时间】:2012-10-02 20:37:12
【问题描述】:

为法语内容配置 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&facet=true&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>

字段定义:

如果有人对此问题有任何想法......

感谢您的回答。 问候 杰罗姆·朗特

【问题讨论】:

    标签: solr truncate faceted-search


    【解决方案1】:

    一般情况下,如果要将字段用作构面,则应将其存储为字符串。

    您正在对一个标记化和过滤的字段进行分面,因此各个值是您的关键字字段中经过处理的字词。

    【讨论】:

    • ...为了进一步扩展,polit 是一个词干,预计搜索 politepoliticspolitize 甚至是无意义的 politication!法语的过程类似。因此,请使用不进行词干提取的 string 数据类型。
    • 这回答了问题,应该被标记为答案 - 我遇到了同样的问题,设置一个字符串字段解决了这个问题。
    【解决方案2】:

    上面说的都是正确的,我只想添加一个方面。构面值是索引术语,而不是存储的术语。对构面的一项建议是使用字符串类型。这通常是一个不错的选择。但有时你想把一些事情以你的面子来说。在这种情况下,您可以使用文本类型,但只轻视输入。在任何情况下都避免选择上述的 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 玩得开心

    奥利弗

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 2011-10-18
      • 2014-10-01
      相关资源
      最近更新 更多