相关文章推荐
曾经爱过的吐司  ·  System.Windows.Markup. ...·  3 月前    · 
乐观的灭火器  ·  (篇八)C语言在母串删子串、输入位置截取子串 ...·  1 年前    · 
仗义的长颈鹿  ·  PgSQL数组及json类型在Mybatis ...·  1 年前    · 
不拘小节的咖啡豆  ·  MySQL JSON - 简书·  2 年前    · 
开朗的针织衫  ·  【VBA】用VBA打开excel,禁止被打开 ...·  2 年前    · 
温柔的遥控器  ·  SSH原理与运用(一):远程登录 - ...·  2 年前    · 
Code  ›  如何在SOLR中创建字符串字段的不区分大小写的副本?开发者社区
string solr 大小写
https://cloud.tencent.com/developer/ask/sof/102234264
无邪的灌汤包
2 年前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

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

Stack Overflow用户
提问于 2010-01-13 07:20:57
EN

如何在不区分大小写的表单中创建字符串字段的副本?我想使用典型的"string“类型和不区分大小写的类型。类型的定义如下:

    <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" />

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

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

2 35.6K 0 票数 27
EN
solr
case-insensitive

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-14 07:00:15

在SO没有回答的情况下,我跟进了SOLR用户列表。在考虑copyField的影响之前,我发现我的string_ci字段并没有像预期的那样工作。Ahmet Arslan解释了为什么"string_ci“字段应该使用solr.TextField而不是solr.StrField:

来自apache-solr-1.4.0\example\solr\conf\schema.xml的

:

不会分析StrField类型,但会对其逐字编制索引/存储。

"solr.TextField允许指定自定义文本分析器作为令牌化器和令牌筛选器列表。“

他用一个例子证明了这一点,并由我自己做了一点调整,下面的字段定义似乎做到了这一点,现在CopyField也能像预期的那样工作。

    <fieldType name="string_ci" class="solr.TextField"
        sortMissingLast="true" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.KeywordTokenizerFactory"/>           
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
    </fieldType> 

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

票数 54
EN

Stack Overflow用户

发布于 2013-10-21 10:22:01

是的,没错。LowerCaseFilterFactory不适用于字符串数据类型。我们只能在文本字段上应用LowerCaseFilterFactory。

如果你尝试这样做

<!-- Assigning customised data type -->
<field name="language" type="text_lower" indexed="true" stored="true"  multiValued="false" default="en"/>  
<!-- Defining customised data type for lower casing. -->
<fieldType name="text_lower" class="solr.String" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

这是行不通的,我们必须使用TextField。

试着这样做,应该能行得通。只需将fieldType从 String 更改为 TextField

​

<!-- Assigning customised data type -->
<field name="language" type="text_lower" indexed="true" stored="true"  multiValued="false" default="en"/>  
<!-- Defining customised data type for lower casing. -->
<fieldType name="text_lower" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
 
推荐文章
曾经爱过的吐司  ·  System.Windows.Markup.XamlParseException HResult=0x80131501 Message=“在“System.Windows.Baml2006.T
3 月前
乐观的灭火器  ·  (篇八)C语言在母串删子串、输入位置截取子串_51CTO博客_c字符串截取子串
1 年前
仗义的长颈鹿  ·  PgSQL数组及json类型在Mybatis项目中的类型转换_pgsql json mybatis-CSDN博客
1 年前
不拘小节的咖啡豆  ·  MySQL JSON - 简书
2 年前
开朗的针织衫  ·  【VBA】用VBA打开excel,禁止被打开文件运行宏或自身VBA_excel vba 打开文件时禁用宏_渣渣黄0的博客-CSDN博客
2 年前
温柔的遥控器  ·  SSH原理与运用(一):远程登录 - 阮一峰的网络日志
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号