【问题标题】:Sorting of Field having special characters in SoLRSoLR中具有特殊字符的字段的排序
【发布时间】:2011-09-23 12:10:20
【问题描述】:

我是 SoLR 索引的新手。 我想对具有不同值的位置字段进行排序。它还包含以 'sAmerica、#'Japan、%India 等开头的值。

现在,当我对该字段进行排序时,我确实想考虑特殊字符,例如 's、'#、!、~ 等。 我想要排序,它会忽略这个字符并返回类似的结果 美国排名第一,%印度排名第二,#'日本排名第三。

如何让它成为可能?我正在使用 PatternReplaceFilterFactory,但不知道这个。

  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" catenateWords="1"  />
    <filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />
  </analyzer>
</fieldType>

【问题讨论】:

    标签: java solr solrnet


    【解决方案1】:

    如果您想忽略特殊字符,请尝试使用以下字段类型。
    这会将单词小写并连接不包括所有特殊字符的单词。

        <fieldType name="string_sort" class="solr.TextField" positionIncrementGap="1">
            <analyzer type="index">
                <tokenizer class="solr.KeywordTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="solr.WordDelimiterFilterFactory" catenateWords="1" />
            </analyzer>
        </fieldType>
    

    但是,这不适用于 'sAmerica,因为 s 不是特殊字符。

    <filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />
    

    如果这是固定模式,则需要将其替换为上面的单词分隔符。

    编辑 -- 你在使用这个配置吗?

    <fieldType name="string_sort" class="solr.TextField" positionIncrementGap="1">
        <analyzer type="index">
            <tokenizer class="solr.KeywordTokenizerFactory" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />
            <filter class="solr.WordDelimiterFilterFactory" catenateWords="1" />
        </analyzer>
    </fieldType>
    

    通过分析测试了以下内容,它产生了以下标记 -

    KT - 阿尔加维
    LCF - 'salgarve
    PRF - 阿尔加维
    WDF - 阿尔加维

    你能检查一下分析吗?

    【讨论】:

    • 什么不起作用?您是否将该字段与 string_sort 字段类型相关联?您是否使用该字段进行排序并标记为索引 true ?您是否检查了我使用上述配置为您的示例测试的分析原因并生成了正确的条目。
    • 不..这是行不通的。我做了所有这些事情。看到我的记录在申请后看起来像:1) Alvor, 2) North 3) Op locatie in 4) 'sAlgarve..这是错误。这应该是 1) 'sAlgarve 2) Alvor 3)North 4) Op locatie in..因为我们用“”替换 's ..
    • jsut 告诉我这些记录的输出是什么?1) Alvor, 2) North 3) Op locatie in 4) 'sAlgarve..如果我应用这个过滤器..
    • 在每个过滤器的答案中附加了 'sAlgarve 的分析输出。
    • 我不知道怎么做分析?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    相关资源
    最近更新 更多