在Solr中使用ToTitleCase来停止Solr中的SCREAMING CAPS

时间:2010-02-09 15:55:04

标签: lucene solr filterfactory

我正在使用solr的刻面,我遇到了一个问题,我希望我可以使用过滤器。

基本上有时候城镇名称将以SOLR的形式出现

“CAMBRIDGE”

有时它会以

的形式出现

“剑桥”

我想在Solr中使用过滤器来停止城镇名称的SCREAMING CAPS版本。似乎有一个契约来制作所有文本lower case

<!-- A text field that only sorts out casing for faceting -->
    <fieldType name="text_facet" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

我想知道是否有人知道过滤器会忽略单词的第一个字符并将小写应用于其余字符。 E.g。

  • CAMBRIDGE&gt;&gt;剑桥
  • Kingston On HULL&gt;&gt;赫尔河畔金斯顿

或者,如果您可以轻松编写自己的过滤器..一些帮助,如何做到这一点将不胜感激..我不是一个Java人..

由于

2 个答案:

答案 0 :(得分:2)

AFAIK没有这样的内置过滤器。如果你想写它,请参阅LowerCaseFilterFactoryLowerCaseFilter作为参考,它似乎并不是很难。

或者您可以在客户端执行此操作,即在SolrNet中,您可以编写一个ISolrOperations装饰器,使用ToTitleCase在真实查询后执行必要的转换。

答案 1 :(得分:1)

也许你可以使用solr.PatternReplaceCharFilterFactory?

<fieldType name="textCharNorm" class="solr.TextField">
  <analyzer>
    <filter class="solr.LowerCaseFilterFactory"/>
    <charFilter class="solr.PatternReplaceCharFilterFactory"
                pattern="([^\s]{1})([^\s]*)" replaceWith="\U$1\L$2"/>
  </analyzer>
</fieldType>

注意,我还没有测试过代码或solr.PatternReplaceCharFilterFactory,所以我不确定它是否有效。如果您需要构建自己的过滤器,那么本指南可能很有用:

http://robotlibrarian.billdueber.com/building-a-solr-text-filter-for-normalizing-data/

//约翰