Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用存储的html字段高亮显示时,Solr剥离html_Solr_Ruby On Rails 3.1_Sunspot Solr - Fatal编程技术网

使用存储的html字段高亮显示时,Solr剥离html

使用存储的html字段高亮显示时,Solr剥离html,solr,ruby-on-rails-3.1,sunspot-solr,Solr,Ruby On Rails 3.1,Sunspot Solr,在rails中使用Solr和太阳黑子 我正在使用如下字段类型搜索html字段: <fieldType name="text_html" class="solr.TextField" omitNorms="false"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <charFilter class="solr.HTMLStripCharFilterFact

在rails中使用Solr和太阳黑子

我正在使用如下字段类型搜索html字段:

<fieldType name="text_html" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>
<fieldType name="text_html" class="solr.TextField" omitNorms="false">
  <analyzer>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

然后我执行搜索并使用存储字段,以便在结果中返回突出显示的文本。我遇到的问题是,存储值中包含原始html文本。例如:对“新闻”的搜索返回:

社区连接到@@@hl@@@news@@@endhl@@@、体育、本地交易和所有最新对话。\n\n

然后我想用html包装的标记替换标记@@@hl@@、@@@endhl@@@

我是否需要自己手动去除原始的html标记(div等)标记,还是有办法让存储的值已经去除html标记

我知道如何手动执行此操作,只是想确保schema.xml或solrconfig.xml中没有遗漏某些内容


谢谢

在插入Solr之前或从索引中检索之后,您需要手动剥离数据/格式。in-Solr针对该字段运行,并在将令牌/术语插入该文档的索引之前或在查询处理期间对传递的值执行操作。但是,它将始终存储用于返回的字段值,并以原始形式传递查询结果


如果您碰巧使用将数据加载到Solr中,它将提供和/或您可以利用删除html标记。

在插入Solr之前或从索引检索之后,您需要手动删除该数据/格式。in-Solr针对该字段运行,并在将令牌/术语插入该文档的索引之前或在查询处理期间对传递的值执行操作。但是,它将始终存储用于返回的字段值,并以原始形式传递查询结果


如果您碰巧使用将数据加载到Solr中,它提供了一个和/或您可以利用来删除html标记。

对于我的项目,我还需要在索引之前剥离html标记,我的google搜索首先将我带到了这里。在短暂访问Paige Cook链接的文档后,我发现了您的
schema.xml
可能存在的问题

根据,
标记必须位于
标记之前

所以我觉得你应该有这样的东西:

<fieldType name="text_html" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>
<fieldType name="text_html" class="solr.TextField" omitNorms="false">
  <analyzer>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

对于我的项目,我还需要在编制索引之前剥离HTML标记,而我的谷歌搜索首先将我带到了这里。在短暂访问Paige Cook链接的文档后,我发现了您的
schema.xml
可能存在的问题

根据,
标记必须位于
标记之前

所以我觉得你应该有这样的东西:

<fieldType name="text_html" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>
<fieldType name="text_html" class="solr.TextField" omitNorms="false">
  <analyzer>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>


谢谢,我会在进去的路上把它们脱掉。谢谢,我会在进去的路上把它们脱掉。