带有特殊字符的 Solr 通配符搜索

时间:2021-02-02 16:23:44

标签: 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>

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

2 个答案:

答案 0 :(得分:0)

我通过以下方式实现了

<fieldType name="string" class="solr.StrField" sortMissingLast="true"/>
<field indexed="true" multiValued="false" name="field_name" stored="true" type="string"/>

使用 field_name=xxx-* 进行搜索只会为我提供以 xxx- 开头的字段。

答案 1 :(得分:0)

了解问题。

<块引用>

标准分词器
此分词器将文本字段拆分为分词,处理 空格和标点符号作为分隔符和分隔符被丢弃。

就您而言,- 是标点符号,说明您搜索 xxx- 时没有结果。

您可以做的是将 StandardTokenizerFactory 替换为 WhitespaceTokenizerFactory,这将在空白处拆分文本流,仅保留标记中的标点符号。