我遇到了问题,谷歌对我帮助不大。我正在尝试找出一种在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的文档,但我没有看到任何关于如何避免此问题的消息。
我应该考虑为索引提供“平面”版本的文本,还是有办法避免使用© / ® / ™
等HTML字符串?
我愿意接受建议。
- 布莱恩。
答案 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©
的所有结果。