我试图搜索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>
但成效有限。 A&#34;内容&#34;字段现在出现在响应中,它包含的内容似乎是初始文档的剥离不良和格式错误的版本。突出显示似乎有效,但它不干净。
所以我需要Solr做的是:
似乎无论我改变什么(除了上面的Tika),&#34; content1&#34;被忽略了。
我试图在这里做的只是简单地说,能够搜索HTML文件并提供与任何其他搜索引擎一样的摘录。
答案 0 :(得分:0)
我无法完成这项工作,Tika也无法正确删除HTML,所以我通过使用Solarium用于Solr和PHPQuery的PHP客户端来解析,剥离,提取数据,然后形成我自己的文档直接发布到Solr。
问题是 solrconfig.xml 中定义的ERH(ExtractRequestHandler),它强制使用Tika。通过使用Solarium,ERH被绕过,因此我在托管架构中定义的所有字段都开始被/ update请求处理程序使用。