首页 > 解决方案 > 带有特殊字符的 Solr 通配符搜索

问题描述

我的用户想要使用特殊字符和通配符进行搜索。在这种情况下,破折号 (-)。

因此,如果我使用 'xxx' 或 'xxx\-' 进行搜索,我会得到包含“xxx-”和“xxx”的结果。但我不想要“xxx”,我只想要有“xxx-”的结果。(破折号)

我尝试使用 xxx-* 进行搜索,但没有给出任何结果。

架构看起来像这样

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
   <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

知道如何实现这一目标吗?

标签: solr

解决方案


了解问题。

标准 标记器
此标记器将文本字段拆分为标记,将空格和标点符号视为分隔符并丢弃分隔符。

在您的情况下-,为什么搜索时没有结果的标点符号xxx-

您可以做的是将文本流拆分为空格的替换StandardTokenizerFactoryWhitespaceTokenizerFactory仅保留标记中的标点符号。


推荐阅读