1

Solrを使用するとブーストに問題があります。最近、LuceneからSolrに切り替えました。

検索対象となる4つの(プライマリ)検索フィールドがあります。エッセンス、キーワード、allSearchable、および品質。ここで、インデックス内の各ドキュメントについて、エッセンスにはキーワードの最初の3つのノンストップワードが含まれています。「キーワード」は単なるキーワードのリストです。また、「allSearchable」は、特定のドキュメントの他のデータの単なるコレクションであるデータを保持します。luceneで行ったことは、ユーザーが検索ボックスに入力した任意の検索に対して3回の検索を行うことでした(検索結果を関連性でランク付けするため)。

検索ボックスに入力された単語:tree

クエリ1:( +essence:tree「品質」で並べ替え)クエリ1が取得したいページに対して十分な値を返した場合は、戻ります。

クエリ2:( +keywords:tree「品質」で並べ替え)クエリ1とクエリ2の組み合わせが、現在のページに対して十分な結果を返した場合は、結果を返します。

クエリ3:( +allSearchable:tree「品質」で並べ替え)結果を返します。ない場合は、頑張ってください。

私の問題はページ付けです。Luceneにページネーション(startIndex、rows)を送信する必要はありませんでした。求めていたページに応じて、すべてを要求してから、戻ってきたものをすべてロールオーバーして、返すのに十分な結果を収集することができました。Solrでは、ページ付けパラメーターを渡す必要があります。インデックスには800万を超えるドキュメントがあるため、「tree」などのクエリに一致するすべてのものを取得するにはコストがかかりすぎます。問題は、クエリ1でページ3を要求し、十分な結果が得られない場合は、クエリ2(keywords:tree)に進む必要があることです。しかし、これは正しくありません。クエリ2のページ3の結果を要求しているためです(つまり、ページ3の'keywords:tree'に一致するすべてのドキュメントを取得してください)。しかし、それは私が聞きたい質問ではありません。エッセンスが何にも一致しない場合にのみ、キーワードの1ページ目を要求したいと思います。等々。

私が本当に探しているのは1つのクエリです。これは、以前に行った3つのクエリに十分であり、エッセンスの一致が最初に返され、キーワードが2番目に一致し、allSearchableが最後に一致します。

私はこのクエリでブーストを使用してみました: essence:tree^4.0 keywords:tree^2.0 allSearchable:tree^1.0

しかし、これはうまくいかないようです、そして私は理由がわかりませんか?私は種類を取り出しました、そして、物事はまだ私に正しい結果を返しません。デフォルトのStandardRequestHandler(LuceneQueryParser(dismaxまたはedismaxではない)を使用しているようです)を使用しています。URLのsolrにブーストが送信されていることがわかります(リクエストハンドラーのデフォルトセクションにqfパラメーターを追加してブーストを使用しています。 solrconfig.xml)。luceneがこれらのパラメーターを理解できることは確かに知っています。上記のように、希望する結果を得ることができる1つのクエリを作成する方法を教えてもらえますか?enter code here

4

1 に答える 1

0

ExtendedDismaxクエリパーサー(eDisMax)を使用することをお勧めします。そうすれば、以下の例に示すように、フィールド全体でブースティングを指定できます。

http://localhost:8983/solr/select/?q=tree
  &defType=edismax&qf=essence^4.0+keywords^2.0+allSearchable^1.0

目的の結果を得るには、フィールド全体でブースティング値を上下に調整する必要がある場合があります。さらに、ブースティングに影響を与えるeDisMaxの追加パラメーターと、クエリの実行方法を調べる必要があります。

于 2013-03-12T15:16:21.203 に答える