solr - 如何在 SOLR 中创建不区分大小写的字符串字段副本?

标签 solr case-insensitive

如何以不区分大小写的形式创建字符串字段的副本?我想使用典型的“字符串”类型和不区分大小写的类型。类型定义如下:

    <fieldType name="string" class="solr.StrField"
        sortMissingLast="true" omitNorms="true" />

    <!-- A Case insensitive version of string type  -->
    <fieldType name="string_ci" class="solr.StrField"
        sortMissingLast="true" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.KeywordTokenizerFactory"/>           
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
    </fieldType> 

以及一个像这样的领域的例子:
<field name="destANYStr" type="string" indexed="true" stored="true"
    multiValued="true" />
<!-- Case insensitive version -->
<field name="destANYStrCI" type="string_ci" indexed="true" stored="false" 
    multiValued="true" />

我尝试使用 CopyField 像这样:
<copyField source="destANYStr" dest="destANYStrCI" />

但是,显然 CopyField 在调用任何分析器之前在 source 和 dest 上被调用,所以即使我已经通过分析器指定 dest 不区分大小写,但从源字段复制的值的大小写被保留。

我希望避免在创建记录时从客户端重新传输字段中的值。

最佳答案

由于没有得到 SO 的答复,我跟进了 SOLR 用户列表。在考虑 copyField 的影响之前,我发现我的 string_ci 字段没有按预期工作。 Ahmet Arslan 解释了为什么“string_ci”字段应该使用 solr.TextField 而不是 solr.StrField:

From apache-solr-1.4.0\example\solr\conf\schema.xml :

"The StrField type is not analyzed, but indexed/stored verbatim."

"solr.TextField allows the specification of custom text analyzers specified as a tokenizer and a list of token filters."



通过他提供的示例和我自己的轻微调整,以下字段定义似乎可以解决问题,现在 CopyField 也按预期工作。
    <fieldType name="string_ci" class="solr.TextField"
        sortMissingLast="true" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.KeywordTokenizerFactory"/>           
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
    </fieldType> 

destANYStrCI 字段将存储一个大小写保留值,但将提供一个不区分大小写的字段以进行搜索。 CAVEAT:不区分大小写的通配符搜索无法进行,因为通配符短语绕过查询分析器并且在与索引匹配之前不会被小写。这意味着通配符短语中的字符必须小写才能匹配。

关于solr - 如何在 SOLR 中创建不区分大小写的字符串字段副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2053214/

相关文章:

c# - SolrNET - 从 Nuget 拉取时无法加载文件或程序集 'HttpWebAdapters'

java - 指定的流长度错误。回退到读取流,直到结束流

git - 如何在 Git 中执行不区分大小写的差异

symfony - 使用findoneby()区分大小写的搜索

regex - 将正则表达式选项传递给PowerShell [regex]类型

validation - 如何使 Xtext 中的 Enum 文字不区分大小写

java - 集成 apache tomcat 和 solr

java - 制作 Solr 中的字段之一(URL)超链接

elasticsearch - Lucene/Solr搜索文档创建

ruby-on-rails - 如何处理自定义 url 中的大写和小写字符?