Solr搜索服务器:如何从要索引的内容中剥离HTML实体



我是Solr的新手,没有Java技能,所以可能我错过了一些东西……我正试图让Solr使用以下CharFilter从内容中剥离HTML:

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.HTMLStripCharFilterFactory

这就是我将其包含到schema.xml:中的方式

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
</fieldType>
<fields>
  <field name="text" type="text" indexed="true" stored="true" multiValued="false" />
</fields>

如果我使用Solr管理面板上的分析器查询"d';Hèrcules",我会得到一个匹配项(见字段):

<doc>
<long name="comment_count">0</long>
<str name="ct_model_name">theatre</str>
<str name="django_ct">timeout.work</str>
<str name="django_id">2535</str>
<bool name="family">false</bool>
<long name="hits">0</long>
<str name="id">timeout.work.2535</str>
<str name="name">Les aventures d'Hèrcules</str>
<arr name="parent_sections">
<str>Escena</str>
</arr>
<long name="rating">0</long>
<bool name="recommended">false</bool>
<arr name="sections">
<str>Escena - Infantil</str>
</arr>
<str name="text">
Les aventures d&#39;Hèrcules Jordi Andújar &lt;p&gt;Prepareu-vos per viatjar a l’antiga Grècia on coneixereu l’heroi més gran de tots els temps: l’Hèrcules. De viatge cap a l’Olimp, l’heroi viurà les més increïbles aventures, lluitarà amb bèsties ferotges i perillosos monstres, i s’enfrontarà a la maldat de la temible deessa Hera. Per a tota la família&lt;/p&gt;
</str>
...
</doc>

但我需要通过搜索非HTML实体形式来匹配:例如,在这种情况下,将是"l'Hèrcules"(注意单引号)。

我做错了什么?

顺便说一句,如果这些信息在任何方面都有用的话,我正在使用django haystack。

提前感谢

赫克托

您在Solr方面做得很好,唯一需要注意的是Solr存储的内容和Solr索引的内容之间存在差异。Solr在不修改任何内容的情况下按原样存储数据,而通过分析器链,您可以更改Solr索引数据的方式。因此,您实际上是在告诉Solr从索引中删除任何html标记,并用相关字符替换html实体,但Solr总是在您提交它们时返回它们。

您可以搜索d'Hèrculesd&#39;Hèrcules,结果应该相同,因为即使在查询时也会触发HtmlStripCharFilterFactory,所以在这两种情况下,您基本上都提交了相同的d'Hèrcules查询,因为&#39;转换为'

您对l'Hèrcules的搜索使我认为文档中lHercules之间的未标注字符不是',而是看起来非常相似的字符。我认为你应该检查一下。

最新更新