1

テキストファイルのコンテンツに対してSolrベースの検索を実行しようとしています。要件は、各ドキュメント内の検索語のすべてのヒットと、ヒットの周囲の強調表示されたテキストを返すことです。

見つかったドキュメントの数と、ドキュメント内の検索語の最初のヒットの前後に強調表示されたスニペットを返すことができます。ただし、検索語が見つかったドキュメント全体のハイライトのリストは返されません。TermFrequencyは正しい数として報告されますが、これらすべての発生に関するスニペットは報告されません。

solrスキーマの関連部分:

<field name="Content" type="text_general" indexed="false" stored="true" required="true"/>
<field name="ContentSearch" type="text_general" indexed="true" stored="false" multiValued="true"/>

<copyField source="Content" dest="ContentSearch"/>

たとえば、インデックスが作成されたa.txtとb.pdfがあり、検索語「case」が両方のドキュメントに複数回存在する場合(a.txt-7ヒット、b.pdf-10ヒット)、両方のドキュメントに対して「case」を検索すると、正しい用語頻度(7と9)で2つのドキュメントが返されますが、ハイライトリストにはファイルの最初のヒットに対応するレコードが1つだけ含まれています。

これは、コンテンツフィールドにTermVectorComponentを使用することと関係がありますか。私は読んだことがありますが、TVCがどのように機能し、どのような状況で役立つかを完全に理解することはできませんでした。

4

1 に答える 1

3

これは、強調表示のデフォルト設定によるものです。目的を達成するために、スニペットmaxAnalyzedCharsオプションを変更することをお勧めします。デフォルトでは、スニペットは 1 つのスニペットのみを返すように設定されており、maxAnalyzedChars は最初の 51200 文字のみを調べます。これらの値をsnippets=20 (または予想されるスニペットの最大数よりも大きい値)に設定し、 maxAnalyzedChars=100000(または最長のフィールド値よりも大きい他の値) を設定すると、値全体が分析され、すべてのハイライトが返されることが保証されます。

注: スニペットの適切なサイズを取得するために、 fragsize設定を操作する必要がある場合もあります (強調表示された単語の前後に行を含めるため)。フラグメントのデフォルトのサイズは 100 文字です。

SolrNet 内では、クエリに渡すSnippetsMaxAnalyzedCharsプロパティを設定する必要がありHighlightingParametersます。次のようなものです。

   var results = solr.Query(new SolrQueryByField("ContentSearch", "case"), 
     new QueryOptions {
       Highlight = new HighlightingParameters {
          Fields = new[] {"ContentSearch"},
          Snippets = 20,
          MaxAnalyzedChars = 100000,
      }
   });
于 2013-01-31T12:36:04.447 に答える