私の要件は、ファイルコンテンツ内を検索することです。単語が存在する場合、単語が存在するファイルコンテンツの特定の行を送信する必要があります。私は Solr-DIH を使用しており、行ごとに処理するために Line エンティティ プロセッサを使用しています。私のデータ構成ファイルは
<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>