1

Solr 4.0を使用すると、次のクエリがあります。

(family_name:(Brown) OR maiden_name:(Brown)^0.5) AND (
    source:HIGHQUALITY^3000 OR source:SVC1^2000 OR 
    source:SVC2 OR source:SVC3 OR 
    source:SVC4 OR source:SVC5)

ここで、HIGHQUALITYおよびSVC1..SVC5は、「ソース」フィールドの値の実際の名前ではありません。それらがアルファオーダーである、またはこれまでにそうなる可能性があると完全に想定することはできません...

私が探しているのは、フィールドに対して一連のクエリを実行するのではなく、ソースのインデックス付きフィールドの値に基づいてブーストを返す関数です。solr-hybrid-pseudocodeの場合:

{!boost 
    switch (source) {
    case "HIGHQUALITY": return 3
    case "SVC1": return 2
    default: return 1
    }
}
4

1 に答える 1

1

ブーストの重み付けが一般的に静的である場合(つまり、リクエストごとに変更しないでください)、このようなことを行う最も簡単な方法は、外部ファイルフィールドを使用することです...

lucene.apache.org/solr/api/org/apache/solr/schema/ExternalFileField.html

一般的な使用例は、各ドキュメントの「id = value」ペアのマッピングを含めることですが、ルックアップフィールドがid/uniqueKeyである必要はありません。(特定のケースでは)「ソース」フィールドの既知の値ごとに5つのマッピングとデフォルトのマッピングをリストした単純なファイルを作成し、その数値を関数で使用できます。

クエリ時に任意の値を使用してスイッチを指定する必要がある場合は、ネストされた「if」関数を使用してこれを可能にする新しい関数がトランクで利用できます(ただし、これは個人的にテストしていません)...

wiki.apache.org/solr/FunctionQuery#if

wiki.apache.org/solr/FunctionQuery#termfreq

if(termfreq(source,'HIGHQLTY'),3,if(termfreq(source,'SVC1'),2,1))
于 2012-05-10T15:25:58.693 に答える