如何使用空格实现Solr不区分大小写和重音不敏感的子字符串搜索?

时间:2013-12-11 22:46:20

标签: search solr

我将120000个葡萄酒记录存储在SQL Server数据库中。到目前为止,我通过执行以下SQL成功搜索了葡萄酒名称:

WHERE (LOWER(Wine.name) LIKE '%" + (searchString) + "%'")

我现在正在切换到使用Solr。我想搜索“clos rene”并获得“ClosRéné”。但Solr将返回所有与“Clos”匹配的记录以及与“Réné”匹配的所有记录。我已经尝试了以下字段定义:

<fieldType name="c_text" class="solr.TextField" positionIncrementGap="100">
  <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>

有人可以帮我定义正确的字段类型,以便我可以重现上面的SQL查询,为多个单词之间的空白区域返回不区分大小写和重音不敏感的结果吗?

我还尝试使用字段类型'string'进行通配符搜索,但我无法使其不区分大小写。

1 个答案:

答案 0 :(得分:2)

尝试,

<fieldType name="c_text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
   <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="50" side="front"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
  </analyzer>
</fieldType>

编辑:好了,现在我收到你的问题,额外补充:<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="50" side="front"/>试试这个。