0

私は solr を使用してドキュメントを検索し、1 つのフィールドで一致させてから、他のフィールドに表示されるキーワードに基づいてブーストしたいと考えています。

元。

<str name="qf">
  name^1
</str>
<str name="pf">
   keywords1^2
   keywords2^1.2
   description^0.2
 </str>

だから私が検索すると

q=foo+bar

そして私は結果を持っています

name = "This is a foo bar"
keywords1 = "bar"
keywords2 = "foo cats dogs chicken"
description = "There is a foo in here with a bar"

クエリは、キーワード 1 とキーワード 2 からではなく、説明からブーストされます。これは、pf が "foo" "bar" ではなく "foo bar" (フレーズ slop) をキーワード 1 で検索するためだとわかっています。個々の単語に基づいてブーストしたいと思います。これはプラグインなしで可能ですか?

私が考えたこと:

pf2 や pf3 などのオプションは認識していますが、基本的に探しているのは pf1 です。一言で盛り上がれるようになりたいです。

キーワード 1 とキーワード 2 を qf に追加しない理由は、それらを一致させたくないからです。キーワード 2 には、ドキュメントとは関係のない用語がいくつか含まれています。

クエリ時にクエリを分割して bq を使用できます

bq = keywords1:foo OR keywords1:bar etc...

しかし、異なるフィールドに異なる重みを割り当てたいのですが、クエリを作成するのは面倒です。

要約すると、pf1 のようなパラメーターが必要です。

4

1 に答える 1

1

SOLR ソース コードを調べたところ、edismax クエリ パーサーに pf1 パラメーターを追加するのはかなり簡単でした。pf2 と pf3 は、pf1 に対して呼び出すことができるより一般的な関数を使用します。ただし、ソースからsolrを再コンパイルする必要はありませんでした。ネストされたクエリを使用して回避策を管理しました。

私は今持っています

<str name="qf">
  name^1
  keywords1^2
  keywords2^1.2
  description^0.2
</str>

そして、私のクエリは次のようになります

q=(foo bar) AND _query_:"{!edismax qf='name'}foo bar"

したがって、最初のクエリのすべてのブーストを取得しますが、名前を制限します。

于 2014-08-26T17:54:27.523 に答える