我想在 SOLR 查询期间忽略特殊字符。 例如 : 假设我们在 SOLR 中有一个文档,内容为 content:My name is A-B-C 。
内容:A-B-C 返回文档 但 content:ABC 不返回任何文档。
我的要求是 content:ABC 应返回该文档。 所以基本上我想在查询期间忽略这一点。
最佳答案
要在标记之间有特殊字符时连接标记(即 A-B-C
应匹配 ABC
而不仅仅是 A
),您可以使用PatternReplaceCharFilter 。这将允许您用空字符串替换所有这些字符,从而有效地将 ABC
提供给分析过程的下一步。
<analyzer>
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="[^a-zA-Z0-9 ]" replacement=""/>
<tokenizer ...>
[...]
</analyzer>
这将保留所有常规 ascii 字母、数字和空格,同时用空字符串替换任何其他字符。您可能需要调整该字符组以包含更多字符,但这取决于您的原始内容及其处理方式。
在索引和查询时都应该执行此操作(只要您希望用户也能够查询 A-B-C
)。如果您想对这些匹配进行不同的评分,请使用具有不同分析链的多个字段 - 例如,保留一个字段仅对空白进行标记,然后在以下情况下将其提升得更高(使用 qf=text_ws^5 other_field
):您在 A-B-C
上有匹配项。
这不会改变该字段实际存储的内容,因此返回的数据仍然相同 - 只是匹配的执行方式相同。
关于apache - 在SOLR中查询时忽略特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885833/