我使用的是solr分组和我遇到一个问题,我希望我能得到使用的过滤器。

基本上一次一个城镇的名字将通过以为SOLR

"剑桥"

有时候是这将通过因为

"剑桥"

我想用一个过滤器在Solr停止尖叫着帽子版本的市镇名称。它似乎还有一个fitler使所有的文本 情况下.

<!-- 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。

  • 剑桥>>剑桥
  • HULL>>Hull

等等

或者如果它很容易编写自己的过滤器..一些帮助对如何做到这一点,将不胜感激..我不是一个Java人..

感谢

有帮助吗?

解决方案

据我所知,没有内在的过滤器那样。如果你想要写信,请参阅 LowerCaseFilterFactoryLowerCaseFilter 供参考,它不似乎是非常困难的。

或者你可以做这种客户的侧面,即在SolrNet你可以写一ISolrOperations装饰,没有必要的转换后的真正的查询,利用 ToTitleCase.

其他提示

也许你可以使用的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/

//约翰

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top