3

私は検索が初めてで、マッピングのフィールドのブーストに関するドキュメントを解釈するのに苦労しています。

ある記事のタイトルが記事に関連付けられたタグよりも重要な単純なブースティングを実現したいと考えています。

これは、config/[index_name]/[some_name].json に入れた構成の試みです。

{
    "[type]": {
        "properties": {
            "_boost": {
                "name": "title",
                "null_value": 2.0
            }
            "title": {
                "type": "string"
            }
        }
    }
}

このファイルに対する以前の試行からのエラー メッセージが原因で、ファイルが読み取られていることがわかります。また、このマッピングを使用するように、インデックスを削除して試行の間に再作成しました。

これは機能しますか?エラー メッセージは表示されませんが、_search または get _mapping API 呼び出しの出力から効果があるかどうかはわかりません。

_mapping 呼び出しの結果は次のとおりです。

{
    "[type]" : {
        "properties" : {
            "title" : {
                "type" : "string"
            }
            "tags": {
                "type" : "string"
            }
        }
    }
}
4

1 に答える 1

10

ブーストフィールドのドキュメントの例をご覧ください。

ブーストフィールドマッピング(ルートオブジェクトに適用)を使用すると、そのコンテンツがドキュメントのブーストレベルを制御するブーストフィールドマッピングを定義できます。

次のマッピングは、という名前のフィールドを定義します_boost。フィールド自体がインデックス付けされたJSONドキュメント内に存在する場合_boost、その値はインデックス付けされたドキュメントのブーストレベルを制御します。

{
    "tweet" : {
        "_boost" : {"name" : "_boost", "null_value" : 1.0}
    }
}

特別なことは何もありません。この例では、elasticsearchにフィールドをそのまま考慮し、存在しない場合は_boostデフォルト値を指定するように指示しています。1.0ただし、特定のドキュメントのブーストを定義しています。つまり、ドキュメントがクエリに一致すると、ルートオブジェクト_boostに適用したフィールドマッピングに従ってスコアがブーストされます。これは、フィールドレベルでのブーストとは何の関係もありません。

マッピングでは、titleフィールドのコンテンツをとして使用する必要があること_boostを示しており、デフォルトの_boost値を。に指定しています2.0

"_boost": {
    "name": "title",
    "null_value": 2.0
}

タイトルにテキストが含まれているため、これは意味がありません。また、私が推測するものでもありません。

フィールドでの試合をより重要視する方法はいくつかありtitleます。

ドキュメントから理解できる限り、次のようにマッピングで実行できます。

{
    "[type]" : {
        "properties" : {
            "title" : {
                "type" : "string",
                "boost" : 2.0
            }
            "tags": {
                "type" : "string"
            }
        }
    }
}

正直なところ、私はこれを試したことがなく、これまで使用したこともありませんが、luceneを使用すると、インデックス時にフィールドごとにブーストを指定できます。ブーストはそのフィールドの標準の一部になり、その特定のフィールドに一致する場合に考慮されます。だから、これはあなたが探していたものになります。

とにかく、私は個人的にインデックス時間ではなくクエリ時間にブーストを行うので、マッピングを変更する必要はなく、インデックスを再作成せずに重みを変更できます。たとえば、クエリ文字列を使用して、次のようにさまざまな重みを指定してさまざまなフィールドを検索できます。

{
    "query_string" : {
        "fields" : ["title^2", "content"],
        "query" : "this AND that OR thus"
    }
}

クエリ文字列クエリが解析され、 luceneクエリ構文を使用できるようにすることを考慮する必要があります。

さらに、boolクエリを使用してさまざまなクエリを組み合わせることができます。たとえば、用語クエリとその特定のブーストを含むshould句を使用して、タイトルの一致のブーストを次のように表すことができます。

"should" : [
    {
        "term" : { "title" : "your query", "boost" : 2.0 }
    }
]

should句として必要なクエリを使用できます。クエリという用語を使用する場合は、分析されていないことを覚えておく必要があります。

于 2012-09-26T07:48:31.013 に答える