2

レールで Solr と Sunspot を使用します。

次のようなフィールド タイプを使用して 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>

次に、検索を実行し、保存されたフィールドを使用して、強調表示されたテキストを結果に返すことができるようにします。私が抱えている問題は、保存された値に元の html テキストが含まれていることです。例: 「ニュース」を検索すると、次のように返されます。

"@@@hl@@@news@@@endhl@@@、スポーツ、地元のお得な情報、最新の会話へのコミュニティ接続。</div>\n</div>\n</div>"

次に、タグ @@@hl@@@、@@@endhl@@@ を html でラップされたタグに置き換えます。

元の html タグ (div など) のタグを自分で手動で削除する必要がありますか? または、既に html タグを削除した状態で保存されている値を取得する方法はありますか?

これを手動で行う方法は知っていますが、schema.xml または solrconfig.xml に何かが欠けていないことを確認したかっただけです。

ありがとう

4

2 に答える 2

3

Solr に挿入する前、またはインデックスから取得した後に、そのデータ/フォーマットを手動で削除する必要があります。Solrのアナライザー、トークナイザー、およびトークン フィルターは、フィールドに対して実行され、トークン/用語をそのドキュメントのインデックスに挿入する前、またはクエリ処理中に渡された値に対してアクションを実行します。ただし、渡された元の形式でクエリ結果を返すためのフィールド値は常に格納されます。

DataImportHandlerを使用してデータを Solr にロードしている場合は、html タグを削除するために利用できるHtmlStripTransformerおよび/またはRegExTransformerが提供されます。

于 2013-01-25T17:56:23.913 に答える
1

私のプロジェクトでは、インデックスを作成する前に HTML タグを削除する必要があり、Google 検索で最初にここにたどり着きました。Paige Cook がリンクしているドキュメントを少し調べたところ、問題がどこにあるのschema.xmlかがわかりました。

Solr のドキュメントによると、タグはタグの<charFilter>に置く必要があります。<tokenizer>

だから私はあなたがこのようなものを持っているべきだと思います:

<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>
于 2016-05-20T11:02:10.020 に答える