1

我的要求是在文件内容中搜索,如果存在该单词,则必须发送该单词所在的文件内容的特定行。我使用了 Solr-DIH 并且逐行处理我正在使用 Line entity Processor。我的数据配置文件是

    <dataConfig>
    <dataSource type="FileDataSource" name = "fds"/>
    <document>
    <entity name="filelist" processor="FileListEntityProcessor" fileName="sample.docx"
      rootEntity="false"   baseDir="C:\SampleDocuments" >
    <entity name="fileline" processor="LineEntityProcessor"
            url="${filelist.fileAbsolutePath}" format="text">                   
            <field column="linecontent" name="rawLine"/>
    </entity>
    </entity>
    </document>

schema.xml 有条目或 rawLine。

    <field name="rawLine"  type="text" indexed="true" stored="true"/>

我可以进行完全导入,但即使文档中只有 3 行,它也会创建大约 52 个文档,并且如果我正在搜索文档中已经存在的内容,则响应仍然为 0。请帮助我这是因为我无法在线路实体处理器上找到太多信息。

编辑 1 个字段类型text

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" 
            generateWordParts="1" generateNumberParts="1" 
            catenateWords="0" catenateNumbers="0" catenateAll="0" 
            splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" 
            generateWordParts="1" generateNumberParts="1" 
            catenateWords="0" catenateNumbers="0" catenateAll="0" 
            splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>
4

1 回答 1

2

您正在尝试导入Microsoft Word文件。我可以从您的 dataconfig 中看到这一点:fileName="sample.docx"

你不能用FileListEntityProcessor. 这个是为 ASCII 文件设计的。但是 Word 是一种二进制文件格式。为此,您需要使用 an ExtractingRequestHandler

作为起点,请参阅 Lucid 的文档在 stackoverflow 上搜索

为了仅显示关键字产生命中的文档的一小部分,请使用HighlightingSolr 的功能。

您可以在网上找到几个资源,突出显示的工作原理

于 2013-09-12T16:50:53.520 回答