在Solr中如何在搜索过程中区分结果中的大写和小写字符

时间:2018-08-09 11:24:22

标签: solr

我必须搜索ARM,Arm和Arm之类的词。是3个不同的词,例如,当我搜索ARM时,我应该只能看到ARM的结果,而看不到Arm和arm的结果。 我尝试应用过滤器,但似乎什么也没做,希望获得帮助以了解如何实现。 例如,如果我键入“ qsstresn”,我还必须搜索所有类似“ QSSTRESN”的字母,并且必须忽略结果。所以我只会看到所有大写单词的结果。

我需要有关如何做到这一点的建议。

我在自己的schema.xml中添加了

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.UpperCaseFilterFactory"/>
      <filter class="solr.CapitalizationFilterFactory" onlyFirstWord="true" keep="" keepIgnoreCase="true" okPrefix="QSSTRESN"/>

    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.UpperCaseFilterFactory"/>
    </analyzer>
  </fieldType> 

1 个答案:

答案 0 :(得分:0)

如果要区分大小写,请删除所有小写或大写过滤器。这些过滤器将 all 个字符转换为相同的大小写,实际上消除了所有大小写的敏感性。

所以问题不在于您没有应用正确的过滤器,而是您正在应用过滤器来删除要保留的内容。

只是:

<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>

应该适合您想做的事。如果您还想将A.B.C保留为单个令牌(即带有标点符号),请改用WhitespaceTokenizer。

同义词扩展仍然可以出现在查询中。