【问题标题】:Disable solr search on mobile number禁用手机号码上的 solr 搜索
【发布时间】:2015-07-17 18:59:32
【问题描述】:

我有一个名为 verbatim 的 solr 字段,其中包含句子和手机号码。我正在逐字使用 text_general 数据类型。

要求逐字字段不能在手机号上搜索(格式为XXX-XXX-XXXX)。 以下是我的想法。

  1. 在发送到 solr 之前,对电话号码使用模式匹配并将号码替换为“”,然后正常索引。但这意味着我们正在修改内容。而且由于记录数以百万计,因此在 java 中对每条记录都这样做可能会花费额外的时间。

  2. 允许将数据发送到 Solr,并使用 schema.xml 中的模式过滤器作为字段定义(text_general_vision)来识别电话号码,如下所示。但我仍然可以使用 XXX 或 XXX-XXX-XXXX 进行搜索。感谢您对确定问题的任何帮助。提前致谢。

    <fieldType name="text_general_vision" class="solr.TextField" positionIncrementGap="100">
     <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.PatternReplaceFilterFactory" pattern="\\d{3}-\\d{3}-\\d{4}" replacement="" replace="all" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern="\\d{3}-\\d{3}-\\d{4}" replacement="" replace="all" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    

【问题讨论】:

  • 当您说该字段不应该是可搜索的,您的意思是在搜索所有默认字段时?我这样做的一种方法是从查询字段 (qf) 中排除某些字段。在查询中指定字段时,您的字段仍然可以搜索,但是当您搜索所有字段时,它将无法搜索。
  • 搜索将仅在逐字字段上进行。如果逐字为“Crazy mobile 123-456-7899”。对于 creazy 和 mobile 术语,文档应该可见,但对于术语 123/456/7899/123-456-7899/1234567899 则不可见。

标签: solr


【解决方案1】:

问题是您提供的过滤器在标记化之后运行。这意味着它永远不会看到完整的电话号码,因为当它被 - 分隔时,StandardTokenizer 会将其拆分为单独的令牌。

您可以apply a PatternReplaceCharFilter before tokenization happens,这将允许您删除任何与正则表达式匹配的模式。

请记住,您仍然会为每条记录执行此操作(正如您必须为每条记录或每个查询所做的那样 - 记录通常少于查询的数量,但 YMMV),但是逻辑发生在 Solr 端,而不必一直更新每个索引方法。

请记住,如果存储了该字段,电话号码仍然可用,但这似乎不是问题。

【讨论】:

  • 感谢您的回答。我理解了在标记化之后应用过滤器的概念。它奏效了。
猜你喜欢
  • 2015-07-23
  • 2023-03-20
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多