CFSearch + Solr:忽略搜索中的HTML

时间:2012-02-25 23:57:01

标签: coldfusion solr coldfusion-9

我遇到了问题,谷歌对我帮助不大。我正在尝试找出一种在ColdFusion(9)中搜索Solr索引时忽略HTML的方法。

例如,如果我搜索microsoft并且我的索引包含Microsoft© makes Windows®,系统会提示我搜索“Microsoft©制作Windows®”,而不是显示实际结果。

如下所示,我只是将字符串传递给cfsearch的criteria属性 - 但是再次 - 这样做会产生(我认为是)一个“脏”的结果。

  <cfsearch
      collection="mycollection"
      criteria="microsoft"
      name="results"
      maxrows="100"
      suggestions="always"
      contexthighlightbegin="<strong>"
      contextHighlightEnd="</strong>"
      contextPassages="3"
      />

我一直在查看Solr's query syntax的文档,但我没有看到任何关于如何避免此问题的消息。

我应该考虑为索引提供“平面”版本的文本,还是有办法避免使用&copy; / &reg; / &trade;等HTML字符串?

我愿意接受建议。

- 布莱恩。

2 个答案:

答案 0 :(得分:3)

检查您用于搜索的Solr字段是否设置了字符串字段类型而不是Text(允许标记化和其他文本分析)。有关详细信息,请参阅this question

如果确实存在剥离HTML的问题,则必须将HTMLStripCharFilterFactory添加到字段类型配置中,该配置会从索引字段中删除HTML标记。

答案 1 :(得分:1)

对于任何可能面临同样问题的人:

这个问题的解决方案是使用另一种索引方法,而不是尝试解决索引中的HTML。

在数据库中,我创建了一个名为index_search的新字段,在我的应用程序中的insert方法中,我使用了一个正则表达式来省略任何特殊(呃)字符:"[^[:word:].[:space:]-]"

从那里,我将index_search字段传递给cfindex的正文,并使用HTML名称作为标题:

  <cfindex
    collection="mycollection"
    action="update"
    body="name_search,html_description"
    title="name_html"
    key="UUID"
    query="data">

在搜索接近或包含在HTML中的单词或短语时,使用此方法会产生预期的输出。 IE:搜索microsoft会列出其中包含Microsoft©的所有结果。