ハイライト

Solr でのハイライト表示では、ユーザーのクエリに一致するドキュメントの断片をクエリ応答に含めることができます。

断片はクエリ応答の特別なセクション (highlighting セクション) に含まれており、クライアントは含まれている書式設定の手がかりを使用して、スニペットをユーザーに表示する方法を決定します。断片は、クエリから一致する内容を含むドキュメントフィールドの一部であり、「スニペット」または「パッセージ」と呼ばれることもあります。

ハイライトは、おそらく Solr の他のどの部分よりも構成が可能です。断片のサイズ設定、書式設定、順序付け、バックアップ/代替動作、および分類が難しいその他のオプションには、多くのパラメータがあります。それにもかかわらず、ハイライトは非常に簡単に使用できます。

使用法

ハイライト表示には、スキーマuniqueKey が定義されている必要があります。

共通のハイライターパラメータ

ハイライト結果を返すようにするには、hl パラメータと、多くの場合 hl.fl パラメータを設定する必要があります。次の表は、これらのパラメータとその他のサポートされているパラメータについて説明しています。多くのハイライトパラメータは、f.title_txt.hl.snippets など、フィールドごとのオーバーライドをサポートしていることに注意してください。

hl

任意

デフォルト: false

このパラメータを使用して、ハイライトを有効または無効にします。ハイライトを使用する場合は、これを true に設定する必要があります。

hl.method

任意

デフォルト: unified

使用するハイライトの実装/エンジン。使用できる値は、unifiedoriginalfastVector です。

使用可能なハイライターの違いの詳細については、以下の「ハイライターの選択」セクションを参照してください。

hl.fl

任意

デフォルト: df の値

ハイライトするフィールドのリストを、カンマ区切りまたはスペース区切りで指定します。これらは「格納済み」である必要があります。* (アスタリスク) のワイルドカードを使用すると、text_* などのフィールドグロブや、ハイライトが可能なすべてのフィールドでハイライトするための * をマッチングできます。* を使用する場合は、hl.requireFieldMatch=true を追加することを検討してください。

ここにリストされているフィールドは、ハイライトされるクエリで参照されるフィールドと互換性のあるテキスト分析 (スキーマで定義) を持つ必要があることに注意してください。hl.qhl.qparser を変更するか、テキスト分析を変更する必要がある場合があります。

次の例では、ローカルパラメータ構文と、拡張 DisMax (eDisMax) クエリパーサーを使用して、hl.fl のフィールドをハイライトします

&hl.fl=field1 field2&hl.q={!edismax qf=$hl.fl v=$q}&hl.qparser=lucene&hl.requireFieldMatch=true

デフォルトは df パラメータの値であり、df パラメータ自体にはデフォルトがありません。

hl.q

任意

デフォルト: q の値

ハイライトに使用するクエリ。このパラメータを使用すると、ドキュメントの検索に使用されているものとは異なる用語またはフィールドをハイライトできます。これを設定する場合は、hl.qparser も設定する必要がある場合があります。

デフォルトは、q パラメータの値です (すでに解析済み)。

hl.qparser

任意

デフォルト: 説明を参照

hl.q クエリで使用するクエリパーサー。これは hl.q が設定されている場合にのみ適用されます。

デフォルトは defType パラメータの値で、さらにデフォルトは lucene です。

hl.requireFieldMatch

任意

デフォルト: false

false の場合、解析されたクエリがどのフィールドを参照しているかに関わらず、すべてのクエリ用語がハイライト対象の各フィールド (hl.fl) でハイライトされます。true に設定すると、ハイライトされるフィールドと一致するクエリ用語のみがハイライトされます。

クエリがハイライトされるフィールドとは異なるフィールドを参照しており、それらが異なるテキスト分析を持つ場合、クエリはハイライトされるべきクエリ用語をハイライトしない可能性や、その逆の可能性があります。使用される分析は、クエリフィールドではなく、ハイライトされるフィールド (hl.fl) のものです。

hl.queryFieldPattern

任意

デフォルト: none

hl.requireFieldMatch と似ていますが、複数のフィールドを一致させることができます。例: q=fieldA:one OR fieldB:two OR fieldC:three hl.fl=fieldA hl.queryFieldPattern=fieldA,fieldB

また、クエリに hl.fl フィールドが存在しない場合も許可されます。例: q=fieldA:one OR fieldB:two hl.fl=fieldZ hl.queryFieldPattern=fieldA

hl.queryFieldPatternhl.requireFieldMatch=true の両方が指定されている場合、hl.queryFieldPattern は暗黙的に無視されます。

hl.usePhraseHighlighter

任意

デフォルト: true

true に設定すると、Solr はフレーズクエリ (およびその他の位置に依存する高度なクエリ) をフレーズとして正確にハイライトします。false の場合、フレーズの一部は、指定されたフレーズを形成している場合だけでなく、どこでもハイライトされます。

hl.highlightMultiTerm

任意

デフォルト: true

true に設定すると、Solr はワイルドカードクエリ (およびその他の MultiTermQuery サブクラス) をハイライトします。false の場合、それらは全くハイライトされません。

hl.snippets

任意

デフォルト: 1

フィールドごとに生成するハイライトされたスニペットの最大数を指定します。0 からこの値までの任意のスニペット数が生成される可能性があります。

hl.fragsize

任意

デフォルト: 100

ハイライトを検討するフラグメントのおおよそのサイズを文字数で指定します。0 を使用すると、フラグメント化を検討すべきではないことを示し、フィールド値全体が使用されます。

hl.tag.pre

任意

デフォルト: <em>

(オリジナルハイライターの場合は hl.simple.pre) ハイライトされた用語の前に使用する「タグ」を指定します。これは任意の文字列にできますが、ほとんどの場合 HTML または XML タグです。

hl.tag.post

任意

デフォルト: </em>

(オリジナルハイライターの場合は hl.simple.post) ハイライトされた用語の後に使用する「タグ」を指定します。これは任意の文字列にできますが、ほとんどの場合 HTML または XML タグです。

hl.encoder

任意

デフォルト:

空白の場合、保存されたテキストはハイライターによってエスケープ/エンコードされることなく返されます。html に設定すると、特殊な HTML/XML 文字がエンコードされます (例: &&amp; になります)。スニペットの前後の文字はエンコードされません。

hl.maxAnalyzedChars

任意

デフォルト: 51200

ハイライトを探す文字数の制限。この制限を超えると、ハイライトは実行されません。これは主に、最も遅い分析ベースのオフセットソースの場合、パフォーマンス上の懸念事項です。スキーマオプションとパフォーマンスに関する考慮事項を参照してください。

選択されたハイライター (hl.method 経由) に応じて、さらに多くのパラメータがサポートされています。

クエリ応答でのハイライト

クエリへの応答で、Solr はドキュメントとは別のセクションにハイライトデータを含めます。クライアントはこの応答をどのように処理し、ユーザーにハイライトを表示するかを決定する必要があります。

Solr に含まれているサンプルドキュメントを使用して、これがどのように機能するかを見てみましょう。

次のようなクエリに応答して

https://127.0.0.1:8983/solr/gettingstarted/select?hl=on&q=apple&hl.fl=manu&fl=id,name,manu,cat

このような応答が得られます (スペースのために少し切り捨てられています)。

{
  "response": {
    "numFound": 1,
    "start": 0,
    "docs": [{
      "id": "MA147LL/A",
      "name": "Apple 60 GB iPod with Video Playback Black",
      "manu": "Apple Computer Inc.",
      "cat": [
        "electronics",
        "music"
      ]
    }]
  },
  "highlighting": {
    "MA147LL/A": {
      "manu": [
        "<em>Apple</em> Computer Inc."
      ]
    }
  }
}

2つのセクション docshighlighting に注目してください。docs セクションには、クエリの fl パラメータで要求されたドキュメントのフィールドが含まれています ("id"、"name"、"manu"、"cat" のみ)。

highlighting セクションには、各ドキュメントの ID と、ハイライトされた部分を含むフィールドが含まれています。この例では、hl.fl パラメータを使用して、"manu" フィールドでクエリ用語をハイライトしたいと伝えました。そのフィールドでクエリ用語に一致するものがある場合、リスト内の各ドキュメント ID に対して含まれます。

ハイライターの選択

Solr は HighlightComponent (SearchComponent) を提供しており、検索ハンドラーのコンポーネントのデフォルトリストに含まれています。これは、複数の実際のハイライト実装/エンジン (または単に「ハイライター」) でハイライトの処理を行うための、ある程度統合された API を提供します。

複数のハイライターでサポートされているパラメータは多数あり、実装の詳細やセマンティクスが少し異なる場合があるため、ハイライターを切り替えるときに同じ結果を期待しないでください。hl.method パラメータを使用してハイライターを選択する必要があります。

hl.method パラメータで実行時に選択できるハイライターは3つあります。一般的な推奨順に並べています。

Unified Highlighter

(hl.method=unified)

Unified Highlighter は、(Solr 6.4 以降の) 最新のハイライターであり、オプションの中で最もパフォーマンスが高く、正確であることで際立っています。一般的な要件や、プラグイン/拡張機能によるその他の要件を処理できます。このハイライターを最初の選択肢として使用することをお勧めします。

UH はクエリを非常に正確にハイライトするため、基盤となる Lucene クエリが実際に一致するものに忠実です。他のハイライターは、用語をより自由にハイライトします (過剰ハイライト)。難解/カスタムのクエリの場合、このハイライターは他のハイライターよりもサポートする可能性が高くなります。

このハイライターの強力な利点は、大規模なドキュメントのハイライトを高速化するために、Solr を構成してより多くの情報を基盤となるインデックスに配置できることです。複数の構成がサポートされており、フィールドごとに構成することもできます。他のハイライターのオフセットソースには、このような柔軟性はほとんどありません。詳細については、以下を参照してください。

このハイライターを選択しない理由もいくつかあります。パッセージスコアリングでは、クエリのブーストが考慮されません。一部のユーザーは、より多くの/より良いパッセージ分割の柔軟性を求めています。「代替」フォールバックオプションはより原始的です。

Original Highlighter

(hl.method=original)

Original Highlighter は、「Standard Highlighter」または「Default Highlighter」とも呼ばれる、Lucene のオリジナルのハイライターです。これは、高度なカスタマイズオプションを備えた由緒あるオプションです。クエリの精度はほとんどのニーズには十分ですが、Unified Highlighter ほど優れていません。

Original Highlighter は通常、ハイライトするために保存されたテキストをオンザフライで分析します。利用可能な場合は、完全な項ベクトルを使用します。テキストが「保存」されていなくても、ドキュメント値 (docValues="true") にある場合、このハイライターはそれを使用できます。

このハイライターの欠点はパフォーマンスです。Unified Highlighter の 2 倍の遅さであることがよくあります。また、最もカスタマイズ可能であるにもかかわらず、BreakIterator ベースのフラグメント化機能はありません (他のハイライターはすべてあります)。これは、一部の言語にとって課題になる可能性があります。

FastVector Highlighter

(hl.method=fastVector)

FastVector Highlighter は、フィールドで完全な項ベクトルオプション (termVectors, termPositions, termOffsets) を必要とし、それを念頭に置いて最適化されています。いくつかの可変性があるものの、Original Highlighter とほぼ同等の構成が可能です。

このハイライターは、特に多色ハイライトをサポートしており、異なるクエリ語を異なるマークでフラグメント内に示すことができ、通常は一意の色を持つ HTML タグとして表現されます。

このハイライターのクエリ表現は、Original または Unified Highlighters よりも高度ではありません。たとえば、surround パーサーではうまく機能せず、ストップワードを含むクエリに関する複数のバグが報告されています。

FastVector と Original Highlighters の両方を、検索リクエストで組み合わせて使用して、あるフィールドを一方のハイライターでハイライトし、別のフィールドを他方のハイライターでハイライトできます。対照的に、Unified Highlighter は排他的にのみ選択できます。

Unified Highlighter は、検索パラメータを介して排他的に構成されます。対照的に、Original および FastVector Highlighters の一部の設定は、solrconfig.xml で設定されます。後者の堅牢な例は、「techproducts」構成セットにあります。

以下の詳細に加えて、詳細については、Solr javadocs を参照してください。

スキーマオプションとパフォーマンスに関する考慮事項

ハイライトの内部処理の基本は、クエリに一致する個々の単語のオフセットを検出することです。一部のハイライターは、スキーマで定義された分析チェーンを通じて保存されたテキストを実行できます。一部はポスティングから参照でき、一部は項ベクトルから参照できます。これらの選択肢には異なるトレードオフがあります。

  • 分析: Unified および Original Highlighters でサポートされています。以下の他のオプションを設定しないと、ハイライターはオフセットを計算するために、(ハイライト中に) 保存されたテキストをオンザフライで分析します。

    このアプローチの利点は、ハイライトに厳密に必要ではない余分なデータでインデックスが大きくなることがないことです。

    欠点は、ハイライトの速度が処理するテキスト量にほぼ比例し、分析チェーンの複雑さが大きな要因となることです。

    「短い」テキストの場合、これは良い選択肢です。または、短くはないかもしれませんが、ハイライトのパフォーマンスよりも小さいインデックスとインデックスの速度を優先している場合があります。

  • ポスティング: Unified Highlighter でサポートされています。storeOffsetsWithPositionstrue に設定します。これにより、インデックスに中程度の量の追加データが追加されますが、特に長いテキストフィールドで分析する場合と比較して、ハイライトが大幅に高速化されます。

    ただし、ワイルドカードクエリは、「軽い」項ベクトルが追加されない限り、分析にフォールバックします。

    • 項ベクトル付き (軽い): Unified Highlighter のみでサポートされています。このモードを有効にするには、termVectorstrue に設定しますが、ハイライトされるフィールドでは他の項ベクトル関連オプションを設定しないでください。

      これにより、storeOffsetsWithPositions だけよりも多くのデータがインデックスに追加されますが、すべての追加項ベクトルオプションを有効にするほどではありません。項ベクトルは、ワイルドカードクエリが使用された場合にのみハイライターによってアクセスされ、保存されたテキストの分析へのフォールバックを防ぎます。

      これは、大きなテキストフィールドでワイルドカードクエリをハイライトするための最も高速なオプションです。

  • 項ベクトル (完全): Unified、FastVector、および Original Highlighters でサポートされています。termVectorstermPositions、および termOffsetstrue に設定し、高度なユースケースでは termPayloads を設定します。

    これにより、インデックスにかなりの重みが追加されます。これは、圧縮された保存済みテキストのサイズとほぼ同じです。Unified Highlighter を使用している場合、これはポスティングと軽い項ベクトルよりも遅く、重いため、推奨される構成ではありません。ただし、完全な項ベクトルが他のユースケースですでに必要な場合は、これが理にかなう可能性があります。

Unified Highlighter

Unified Highlighter は、前にリストしたパラメータに加えて、次の追加パラメータをサポートしています。

hl.offsetSource

任意

デフォルト: 説明を参照

デフォルトでは、Unified Highlighter は通常、適切なオフセットソース (上記参照) を選択します。ただし、あるオフセットソースから別のオフセットソースへの移行が完了していない場合など、曖昧な場合があります。

オフセットソースは、ANALYSISPOSTINGSPOSTINGS_WITH_TERM_VECTORS、または TERM_VECTORS のいずれか1つに明示的に構成できます。

hl.fragAlignRatio

任意

デフォルト: 0.33

このパラメータは、パッセージ内の最初のマッチ (つまり、ハイライトされたテキスト) が配置される場所に影響します。

デフォルト値の0.33は、一致箇所を左3分の1に揃えることを意味します。0.0は一致箇所を左に揃え、1.0は右に揃えることを意味します。この設定は、さまざまな要因があるため、最善のヒントとして機能します。強調表示するテキストが多い場合は、この数値を小さくするとパフォーマンスが大幅に向上する可能性があります。

hl.fragsizeIsMinimum

任意

デフォルト: true

trueの場合、hl.fragsizeパラメータは、(ソフトな)最小フラグメントサイズとして扱われます。十分なテキストがあれば、フラグメントはこのサイズ以上になります。falseの場合、最適なターゲットとなります。ハイライターは、平均してこの長さのハイライトを生成します。falseの設定は、特にテキストが多く、hl.bs.type=SENTENCEの場合に遅くなります。

hl.tag.ellipsis

任意

デフォルト: 説明を参照

デフォルトでは、各スニペットは個別の値として返されます(他のハイライターと同様)。代わりに、このテキストを区切り文字として1つの文字列を返すようにこのパラメータを設定します。注: これは将来削除される可能性があります。

hl.defaultSummary

任意

デフォルト: false

trueの場合、適切な強調表示されたスニペットを生成できない場合は、テキストの先頭部分をスニペットとして使用します。

hl.score.k1

任意

デフォルト: 1.2

BM25の用語頻度正規化パラメータ「k1」を指定します。たとえば、一致するクエリ用語の数のみに基づいてパッセージをランク付けするために、0に設定できます。

hl.score.b

任意

デフォルト: 0.75

BM25の長さ正規化パラメータ「b」を指定します。たとえば、ランク付け時にパッセージの長さを完全に無視するために、"0"に設定できます。

hl.score.pivot

任意

デフォルト: 87

BM25の文字単位の平均パッセージ長を指定します。

hl.bs.language

任意

デフォルト: なし

ドキュメントをパッセージに分割するためのbreakiterator言語を指定します。

hl.bs.country

任意

デフォルト: なし

ドキュメントをパッセージに分割するためのbreakiterator国を指定します。

hl.bs.variant

任意

デフォルト: なし

ドキュメントをパッセージに分割するためのbreakiteratorバリアントを指定します。

hl.bs.type

任意

デフォルト: SENTENCE

ドキュメントをパッセージに分割するためのbreakiteratorタイプを指定します。SEPARATORSENTENCEWORD*、CHARACTERLINE、またはWHOLEが使用可能です。SEPARATORは、hl.bs.separatorでユーザーが指定した文字でテキストを分割する特別な値です。

hl.bs.separator

任意

デフォルト: なし

テキストを分割する文字を示します。hl.bs.type=SEPARATORを定義した場合のみ使用してください。

これは、目的のハイライトパッセージ境界に特殊な区切り文字があるように、テキストが事前に操作されている場合に便利です。この文字は、パッセージの最後の文字としてテキストに表示されます。

hl.weightMatches

任意

デフォルト: true

UHに、SpanQuery変換を行う代わりにLuceneの「Weight Matches」APIを使用するように指示します。これは、クエリを反映する最も正確な強調表示モードです。さらに、フレーズは単語ごとにではなく、全体として強調表示されます。現在、この設定は、多くのフィールドが強調表示されている場合、統合ハイライターを大幅に遅くします。

hl.usePhraseHighlighterまたはhl.multiTermQueryのいずれかがfalseに設定されている場合、この設定は設定に関係なく事実上falseになります。

オリジナルハイライター

オリジナルハイライターは、前にリストされたものに加えて、以下の追加パラメータをサポートします

hl.mergeContiguous

任意

デフォルト: false

隣接するフラグメントを1つのフラグメントに折りたたむようにSolrに指示します。trueの値は、隣接するフラグメントが単一のフラグメントに折りたたまれることを示します。

hl.maxMultiValuedToExamine

任意

デフォルト: Integer.MAX_VALUE

停止する前に、多値フィールドで検査する最大エントリ数を指定します。一致が見つかる前に制限に達した場合、結果がゼロになる可能性があります。

maxMultiValuedToMatchで使用した場合、最初に制限に達した方が、いつ検索を停止するかを決定します。

hl.maxMultiValuedToMatch

任意

デフォルト: Integer.MAX_VALUE

停止する前に、多値フィールドで見つかる最大一致数を指定します。

hl.maxMultiValuedToExamineも定義されている場合、最初に制限に達した方が、いつ検索を停止するかを決定します。

hl.alternateField

任意

デフォルト: なし

Solrがスニペットを生成できない場合(つまり、用語が一致しない場合)に、バックアップのデフォルトの概要として使用するフィールドを指定します。

hl.maxAlternateFieldLength

任意

デフォルト: 0

返すフィールドの最大文字数を指定します。0以下の値は、フィールドの長さが無制限であることを意味します。

このパラメータは、hl.alternateFieldパラメータと組み合わせてのみ使用されます。

hl.highlightAlternate

任意

デフォルト: true

trueに設定され、hl.alternateFieldNameがアクティブな場合、Solrは一致する箇所を強調表示して、代替フィールド全体を表示します。hl.maxAlternateFieldLength=Nを使用した場合、Solrは最適な一致フラグメントの周囲の最大N文字を返します。

falseに設定されている場合、または代替フィールドにも一致がない場合、代替フィールドは強調表示なしで表示されます。

hl.formatter

任意

デフォルト: simple

強調表示された出力のフォーマッタを選択します。現在、唯一有効な値はsimpleで、強調表示された用語をカスタマイズ可能なプレテキストとポストテキストのスニペットで囲みます。

hl.simple.pre, hl.simple.post

任意

デフォルト: 説明を参照

simpleフォーマッタを使用する場合、強調表示された用語の前(hl.simple.pre)と後(hl.simple.post)に表示されるテキストを指定します。デフォルトは<em></em>です。

hl.fragmenter

任意

デフォルト: gap

強調表示されたテキストのテキストスニペットジェネレータを指定します。標準のフラグメンターはgapで、多値フィールドのギャップ付きの固定サイズフラグメントを作成します。

もう1つのオプションはregexで、指定された正規表現に似たフラグメントを作成しようとします。

hl.regex.slop

任意

デフォルト: 0.6

regexフラグメンター(hl.fragmenter=regex)を使用する場合、このパラメータは、正規表現に対応するために、フラグメンターが理想的なフラグメントサイズ(hl.fragsizeで与えられます)から逸脱できる係数を定義します。

たとえば、hl.fragsize=100の場合、スロップが0.2の場合、長さが80〜120文字のフラグメントを生成する必要があります。regexフラグメンターを使用する場合は、少し小さいhl.fragsize値を提供することをお勧めします。

hl.regex.pattern

任意

デフォルト: なし

フラグメント化のための正規表現を指定します。これは、文を抽出するために使用できます。

hl.regex.maxAnalyzedChars

任意

デフォルト: 10000

regexフラグメンターを使用する場合、Solrにフィールドからこの文字数のみを分析するように指示します(その後、フラグメンターは固定サイズのフラグメントを生成します)。

複雑な正規表現を巨大なフィールドに適用するのは、計算コストが高いことに注意してください。

hl.preserveMulti

任意

デフォルト: false

trueの場合、多値フィールドはインデックスに保存された順序ですべての値を返します。falseの場合、ハイライトリクエストに一致する値のみが返されます。

hl.payloads

任意

デフォルト: true

hl.usePhraseHighlightertrueで、インデックス付きフィールドにペイロードはあるが、用語ベクトルがない場合(一般的に非常にまれです)、インデックスのペイロードが、投稿とともにハイライターのメモリインデックスに読み込まれます。

これが起こる可能性があり、強調表示に不要であることがわかっている場合(つまり、クエリがペイロードでフィルタリングしない場合)、これをfalseに設定することで、少しメモリを節約できます。

オリジナルハイライターには、solrconfig.xmlに新しい機能を登録できるプラグインアーキテクチャがあります。「techproducts」configsetは、これらの設定のほとんどを明示的に示しています。これをガイドとして使用して、独自のコンポーネントを提供し、SolrFormatterSolrEncoder、およびSolrFragmenterを含めることができます。

FastVectorハイライター

FastVectorハイライター(FVH)は、すべてのフィールドをFVHで強調表示する必要がない場合、オリジナルハイライターと組み合わせて使用できます。このようなモードでは、FVHを使用する必要があるすべてのフィールドについて、hl.method=originalおよびf.yourTermVecField.hl.method=fastVectorを設定します。注意すべき1つの面倒な点は、オリジナルハイライターがhl.simple.preを使用するのに対し、FVH(および他のハイライター)はhl.tag.preを使用することです。

共通ハイライターパラメータに加えて、上記のオリジナルハイライターで文書化されている以下のパラメータもFVHでサポートされています

  • hl.alternateField

  • hl.maxAlternateFieldLength

  • hl.highlightAlternate

また、FVHでサポートされている追加のパラメータは次のとおりです

hl.fragListBuilder

任意

デフォルト: weighted

スニペットフラグメント化アルゴリズム。weighted fragListBuilderは、IDFウェイトを使用してフラグメントを順序付けます。

その他のオプションは、フィールドの内容全体を1つのスニペットとして返すsingleまたはsimpleです。このパラメータを使用してfragListBuilderを選択したり、solrconfig.xmlで既存の実装を変更して「default=true」を追加することでデフォルトにすることができます。

hl.fragmentsBuilder

任意

デフォルト: default

フラグメントビルダーは、フラグメントのフォーマットを担当し、デフォルトでは<em>および</em>マークアップを使用します(hl.tag.preおよびhl.tag.postが定義されていない場合)。

事前に構成されたもう1つの選択肢はcoloredで、選択した場合、色の強調表示のためにHTMLをスニペットに挿入する方法の例です。必要に応じて、独自に実装することもできます。このパラメータを使用してフラグメントビルダーを選択したり、solrconfig.xmlで既存の実装を変更して「default=true」を追加することでデフォルトにすることができます。

hl.boundaryScanner

以下のFastVectorハイライターでの境界スキャナーの使用を参照してください。

hl.bs.*

以下のFastVectorハイライターでの境界スキャナーの使用を参照してください。

hl.phraseLimit

任意

デフォルト: 5000

最高スコアのフレーズを検索する際に分析する最大フレーズ数。

hl.multiValuedSeparatorChar

任意

デフォルト: スペース文字

多値フィールドで1つの値を次の値と区切るために使用するテキスト。デフォルトは「 」(スペース)です。

FastVectorハイライターでの境界スキャナーの使用

FastVectorハイライターは、強調表示された単語を切り捨てることがあります。これを防ぐには、solrconfig.xmlで境界スキャナーを実装し、hl.boundaryScannerパラメータを使用して強調表示の境界スキャナーを指定します。

Solrは、breakIteratorsimpleの2つの境界スキャナーをサポートしています。

breakIterator境界スキャナー

breakIterator境界スキャナーは、ロケールと境界タイプを考慮に入れることで、すぐに優れたパフォーマンスを発揮します。ほとんどの場合、breakIterator境界スキャナーを使用することをお勧めします。breakIterator境界スキャナーを実装するには、solrconfig.xmlファイルのhighlightingセクションにこのコードを追加し、アプリケーションに合わせてタイプ、言語、および国値を適切に調整します

<boundaryScanner name="breakIterator" class="solr.highlight.BreakIteratorBoundaryScanner">
   <lst name="defaults">
     <str name="hl.bs.type">WORD</str>
     <str name="hl.bs.language">en</str>
     <str name="hl.bs.country">US</str>
   </lst>
</boundaryScanner>

hl.bs.typeパラメータに使用可能な値は、WORD、LINE、SENTENCE、およびCHARACTERです。

シンプルな境界スキャナー

simple境界スキャナーは、指定された最大文字数(hl.bs.maxScan)と、句読点などの一般的な区切り文字(hl.bs.chars)に対して、用語の境界をスキャンします。simple境界スキャナーを実装するには、solrconfig.xmlファイルのhighlightingセクションに以下のコードを追加し、アプリケーションに合わせて値を適切に調整してください。

<boundaryScanner name="simple" class="solr.highlight.SimpleBoundaryScanner" default="true">
   <lst name="defaults">
     <str name="hl.bs.maxScan">10</str>
     <str name="hl.bs.chars">.,!?\t\n</str>
   </lst>
</boundaryScanner>