6

Fragsizeが500のフラグメントを返すようにSOLRを構成しました。

フィールド全体が500文字以下の場合もあるため、フラグメントはフィールドと同じです。それより長いフィールドの場合、SOLRは、フラグメントがフィールドのコンテンツの一部のみを表していることを示すことなく(またはそのように見える)フラグメントを返すだけです。これは、フラグメントが文の途中で開始する可能性があることを意味します。

ユーザーがフラグメントを見ていることを明確にし、そのようなフラグメントの最後または最初に省略記号を表示するだけです。その機能はSOLRに組み込まれていますか?そうでない場合は、省略記号をどのように挿入しますか?

4

4 に答える 4

1

私がやったことは、フラグメントと、フラグメントが作成された変更されていないフィールドの両方を返すことでした。

次に、省略記号をフラグメントに追加する必要があるかどうか、追加する場合はフラグメントの前、後、または前後の両方に追加するかどうかを判断するために、2つを比較するロジックを作成しました。

于 2010-09-30T12:26:58.533 に答える
0

Solrはインジケーターを返しません。その通りです。

fragsizeを501に設定します。次に、UIで簡単なロジックを実行して、省略記号を表示するかどうかを決定します。

501から500までを切り捨てて、省略記号を追加します。

于 2010-08-08T14:44:07.663 に答える
0

私は同じ問題を扱っただけです。私がこれを行った方法は次のとおりです。

  1. 元の文字列を取得する
  2. 元の文字列の最初と最後の10文字の両方を取得します
  3. Solr検索によって返されたフラグメントの最初と最後の10文字の両方を取得します
  4. 両方を比較し、必要に応じて変数を入力してください。

    $f_ellip = NULL;
    $l_ellip = NULL;
    if ($orig_body_beggining != substr((string)$hl_content->str, 0, 10)) {
        $f_ellip = "… ";
    }
    if ($orig_body_end != substr((string)$hl_content->str, 0, -10)) {
         $l_ellip = " …";
    }
    $entry_body = $f_ellip.(string)$hl_content->str.$l_ellip;
    
于 2010-10-18T01:17:58.653 に答える
-1

別のより良いアプローチがあります。インデックスの作成中に、このロジックがすでに適用されている「ティーザー」属性を追加します。その努力をあなたの要求から完全に押し出してください。それはまさに私がこれを行う方法です。

于 2010-08-10T11:20:05.080 に答える