【问题标题】:Case Sensitive and In-Sensitive search on same field在同一字段上区分大小写和不敏感搜索
【发布时间】:2016-01-18 22:57:49
【问题描述】:

我的 Schema 配置如下所示

<fieldType class="org.apache.solr.schema.TextField" name="TextField">
 <analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
</fieldType>

<field indexed="true" multiValued="false" name="message" stored="true" type="TextField"/>

代码如下

if(casesensitive == true)
{
  // do case sensitive search
}
else
{
  // do case in-sensitive search
  http://1.2.3.4/solr/a.b/select?q=message:"hit"
}

我能够正确地对该字段进行不区分大小写的搜索。但是如果我输入“Hit”,我希望 SOLR 返回匹配相同大小写的记录。

我也不想在我的 Solr 中创建一个单独的字段,我想从同一个字段中获取记录。任何帮助将不胜感激。

【问题讨论】:

    标签: solr datastax datastax-enterprise


    【解决方案1】:

    我认为这是不可能的。如果要同时实现这两种情况,您需要添加另一个字段。

    您需要有 2 个字段。一个您将添加小写过滤器工厂,而另一个不添加。

    使用单个字段,这是不可能的。 Solr 将按照您定义 fieldType 的方式索引数据。

    【讨论】:

      【解决方案2】:
      【解决方案3】:
      1. 使用带有 store=false 的 copyField 并更改您搜索的字段
      2. 客户端上的小写字母。
      3. 根据额外的标志(例如区分大小写)创建 a complex request processor with switch cases 并执行不同的查询。

      如果您需要为大量字段执行此操作,您还可以为字段定义替代请求处理程序和redefine aliases 以指向区分大小写或不区分大小写的版本。

      【讨论】:

        猜你喜欢
        • 2017-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        相关资源
        最近更新 更多