Nagative boost with apache solr

Apache Solr で特定の検索結果の順位を上げたり下げたりする

Apache SolrのDismaxを使った、bqとその逆をやるnegative boostについて

bq-boost-query-parameter

bq(boost query)

edismaxのクエリにbqを追加するとbqにマッチしたものへのスコアが加算される。 ワンピースで検索した際の検索結果がこんな感じだとする。

クエリ

タイトルにマッチするとスコアが10になるedismaxの重み付で検索

q=ワンピース&qf=title^10

検索結果

  "docs": [
    {
      "title": "ワンピース1",
      "body": "boost用の本文",
      "category": "本",
      "score": 10
    },
    {
      "title": "ワンピース2",
      "body": "テスト用の本文",
      "category": "本",
      "score": 10
    },
    {
      "title": "ワンピース3",
      "body": "boost",
      "category": "電子書籍",
      "score": 10
    },

bqクエリを追加する

bqを追加する

q=ワンピース&qf=title^10&bq=category:"電子書籍"^5

検索結果

category電子書籍のもののscoreが15になる。

  "docs": [
    {
      "title": "ワンピース3",
      "body": "boost",
      "category": "電子書籍",
      "score": 15
    },
    {
      "title": "ワンピース1",
      "body": "boost用の本文",
      "category": "本",
      "score": 10
    },
    {
      "title": "ワンピース2",
      "body": "テスト用の本文",
      "category": "本",
      "score": 10
    },

negative boost

bqの値を少し調整するとboostの逆っぽい挙動が可能になる。 具体的には、以下の検索結果がある時、

クエリ

q=ワンピース&qf=title^10

検索結果

  "docs": [
    {
      "title": "ワンピース",
      "body": "テスト用の本文",
      "category": "ファッション",
      "score": 10
    },
    {
      "title": "ワンピース ピンク",
      "body": "boost用の本文",
      "category": "ファッション",
      "score": 10
    },
    {
      "title": "ワンピース3",
      "body": "boost",
      "category": "電子書籍",
      "score": 10
    },

negativeboost用のクエリ

q=ワンピース&qf=title^10&bq=(*:* -category:ファッション)^5

のように書くと、ファッションカテゴリ以外の結果にスコアが5加算されるようなる。

検索結果

  "docs": [
    {
      "title": "ワンピース3",
      "body": "boost",
      "category": "電子書籍",
      "score": 15
    },
    {
      "title": "ワンピース",
      "body": "テスト用の本文",
      "category": "ファッション",
      "score": 10
    },
    {
      "title": "ワンピース ピンク",
      "body": "boost用の本文",
      "category": "ファッション",
      "score": 10
    },

特定の検索結果だけを上げたいのはboostでいけるのは知っていたけど、その逆をできるのは初めて知った。若干トリッキーだけども。パフォーマンスに影響しそうなので、インデックスのサイズと負荷には注意が必要。

この商品だけ検索結果から上げたい、下げたいってのは結構ありがちなので、覚えておきたい。

connvoi's Picture

About connvoi

肉とビールと料理と写真とゲーム たまに技術 python / Solr / PHP / ansible

Jp, Tokyo https://connvoi.com