【发布时间】:2015-07-17 18:59:32
【问题描述】:
我有一个名为 verbatim 的 solr 字段,其中包含句子和手机号码。我正在逐字使用 text_general 数据类型。
要求逐字字段不能在手机号上搜索(格式为XXX-XXX-XXXX)。 以下是我的想法。
在发送到 solr 之前,对电话号码使用模式匹配并将号码替换为“”,然后正常索引。但这意味着我们正在修改内容。而且由于记录数以百万计,因此在 java 中对每条记录都这样做可能会花费额外的时间。
-
允许将数据发送到 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