2017-04-27 9 views
0

私は、次のデータをSolrのために送信されました:htmlタグのないクエリsolr?

{ 
    "id":"kkk", 
    "name":"<div>book</div>" 
} 

Solrには、データを受信した後、私は「DIV」を検索すると、結果は表示されませんが、私は「本」を検索すると、結果が表示されます、 どのようにできるのか ?ここで は私のスキーマです:私はインデックスを行う際

<field name="name" type="text_html" indexed="true" stored="true"/> 

<fieldType name="text_html" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
     <charFilter class="solr.HTMLStripCharFilterFactory"/> 
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="lang/stopwords_en.txt" 
      /> 
    </analyzer> 
</fieldType> 

SolrにはHTMLタグを取り除くことができ、私が直接データSolrに送信する場合は、どのように私は、HTMLタグを取り除くことができますか?

+0

データを直接送信するとどういう意味ですか? –

+0

solrはファイルをインデックス化するのではなく、データを格納するだけです。 –

+0

Solrはインデックスフィールドを分析します。 –

答えて

1

あなたのSolrクエリの結果としてnameというフィールドに表示される内容は、実際にSolrによって索引付けされたものではありません。

<charFilter class="solr.HTMLStripCharFilterFactory"/>フィルタはHTMLタグを削除します。

すべてのフィルタ/トークナイザが実行された後でさえ、コンテンツは本当にLuceneによって索引付けされます。

詳細については、Solr Admin Analysis Toolをご覧ください。

結論

、フィールドごとに2つのコンテンツがあります。

  • 格納されたコンテンツのインデックスに渡されたソーステキストです(と文書がクエリ制約と一致したときには、ユーザに返されています(stored="true") 。
  • 次に、情報検索部に使用されるトークン/フィルタによって処理された後にソースコンテンツで索引付けされたコンテンツ(indexed="true")。

私の知る限りでは、Mする方法はありません処理後に保存された(ソース)コンテンツをodifyします。これはフィールドのソースだと言われています。ソースを変更したい場合は、Solrに送信する前に準備してください。

+0

次に、保存されたテキストのhtmlタグを削除したい場合、どうすればよいですか? –

+0

私はあなたのコメントを反映するために私の答えを更新しました、それがわかっている場合私に知らせてください – freedev

+0

ok、ありがとう –