在同一领域进行区分大小写和不敏感搜索

时间:2015-10-20 10:18:57

标签: solr datastax datastax-enterprise

我的架构配置如下所示

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

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

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

3 个答案:

答案 0 :(得分:1)

我认为不可能。如果要实现这两种方案,则需要添加另一个字段。

您需要有2个字段。您将在其中添加LowerCase过滤器工厂,而另一个不添加。

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

答案 1 :(得分:0)

答案 2 :(得分:0)

  1. 将copyField与store = false一起使用并更改您搜索的字段
  2. 客户端的小写。
  3. 根据额外标记(例如区分大小写)创建a complex request processor with switch cases并执行不同的查询。
  4. 如果您需要为大量字段执行此操作,还可以为字段定义备用请求处理程序和redefine aliases以指向区分大小写或不区分大小写的版本。