apache - 在SOLR中查询时忽略特殊字符

标签 apache solr solrj solrcloud solr4

我想在 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/

相关文章:

parsing - 如何在apache nutch中爬行提取html中特定div的值?

linux - 无法重定向到 apache 中的其他 url

php - Typo3:可能在 1 台 Linux 服务器上安装 2 个?

java - Intellij 找不到 Tomcat9 的库

java - 搜索 Solr/SolrJ 中的所有字段

java - solr java.lang.NoClassDefFoundError : org/apache/solr/common/ResourceLoader

java - 想要使用Web服务但 "cannot be resolved to a type"

database - 一种在内存中保存经常变化的值的方法

java - 在 SOLR 中创建集合

java - 使用 solrj 的 solr 字段上的 "Group by"