【发布时间】:2017-02-26 03:50:14
【问题描述】:
我正在尝试搜索一组 HTML 文件,并在 Solr 6.4.1 中提供摘录。由于突出显示需要返回清晰可读的文本,因此需要将 HTML 剥离为纯文本并存储。
但无论我在核心配置中进行什么更改,我指定的字段都不会在结果中返回,并且文档的突出显示始终为空 {}。
托管模式:
<fieldType name="text_en_splitting_html" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.WordDelimiterFilterFactory" catenateNumbers="1" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.WordDelimiterFilterFactory" catenateNumbers="0" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<field name="content1" type="text_en_splitting_html" multiValued="true" indexed="true" stored="true"/>
solrconfig.xml 是默认的,带有默认的 /update/extract requestHandler。我得到的回应是:
{
"responseHeader":{
"status":0,
"QTime":4,
"params":{
"q":"*:*",
"hl":"on",
"indent":"on",
"hl.fl":"content1",
"wt":"json",
"_":"1488077854581"}},
"response":{"numFound":100,"start":0,"docs":[
{
"id":"/home/me/files/d1/test.html",
"stream_size":[62963],
"x_parsed_by":["org.apache.tika.parser.DefaultParser",
"org.apache.tika.parser.html.HtmlParser"],
"creator":["createhtml"],
"stream_content_type":["text/html"],
"viewport":["width=device-width, initial-scale=1"],
"dc_title":["A nice read"],
"content_encoding":["UTF-8"],
"resourcename":["/home/me/files/d1/test.html"],
"title":["A nice read"],
"creator_url":["http://createhtml.net"],
"content_type":["text/html; charset=UTF-8"],
"_version_":1560362957551960064}
...
},
"highlighting":{
"/home/me/files/d1/test.html":{},
...
我正在索引
/opt/solr/bin/post -c mycollection -filetypes html files/
我也尝试过使用 Tika 提取处理程序
<requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler">
<lst name="defaults">
<str name="fmap.Last-Modified">last_modified</str>
</lst>
</requestHandler>
但收效甚微。 “内容”字段现在出现在响应中,它包含似乎是原始文档的剥离和格式错误的版本。突出显示似乎有效,但并不干净。
所以我需要 Solr 做的是:
- 完全清理我的 HTML(没有标签、类名或内联样式 - 就像 JavaScript 的 .text() 方法)
- 对剥离的内容执行搜索
- 如果我要求返回剥离的内容
- 返回对剥离内容的突出显示
似乎无论我改变什么(除了上面的Tika),“content1”都会被忽略。
简单地说,我在这里要做的就是能够像任何其他搜索引擎一样搜索 HTML 文件并提供摘录。
【问题讨论】:
-
你能在 Solr 服务器前端确定 content1 字段中是否有实际内容吗?如果是,您能否在查询中将
fl参数与 content1 字段一起使用,这会改变结果吗?