2

Solr でマルチフィールド スコアをカスタマイズしようとしています。

< field name="cat" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
< field name="name" type="text_en_splitting" indexed="true" stored="true" required="true" />
< field name="tags" type="text_general" indexed="true" stored="true" required="true" multiValued="true" /> 
< field name="popularity" type="sint" indexed="true" stored="true" required="true" /> 
< field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

sint はソート可能な int です

でランク付けしたい

  1. 「name」とのクエリ一致
  2. '人気'
  3. 「タグ」とのクエリ一致。

これが私のsolrjコードです:

HttpSolrServer solr = new HttpSolrServer("http://localhost:8983/solr");
SolrQuery query = new SolrQuery();
query.setQuery("National");

query.setFields("cat name tags popularity id score");
query.setStart(0);   

//boost
query.set("defType", "edismax");
query.set("qf", "name^999.0 tags^2.0 popularity^-1000.0");
QueryResponse response = solr.query(query);        
SolrDocumentList results = response.getResults();

for (int i = 0; i < results.size(); ++i) {
System.out.println(results.get(i));
}

テストすると、タグと人気が異なっていても、すべてのドキュメントで同じスコアが得られます。私は copyfield タイプを実行したくなく、setAddField は 1 つのフィールドに基づいてのみソートします...

これは非常に一般的な問題のように思えますが、私は Web 全体にスコアを付けましたが、問題の解決策は見つかりませんでした。返信ありがとうございます。:)

4

1 に答える 1

0

まず、dismax スコアの計算方法を理解するには、http://searchhub.org/2010/05/23/whats-a-dismax/ を参照 てくださいscore is determined by the maximum score of it’s subclauses — instead of the sum like a BooleanQuery。個々のスコアは追加されませんが、ほとんどの場合、名前の一致によって支配されます。これが、すべての結果で同じスコアが表示される理由です。

また、あなたの意図が何であるかわかりませんpopularity^-1000.0。で結果を後押ししたいと思いますpopularity

標準のクエリ パーサーを使用して、次のようなことを試すことができます。

q={!boost popularity}name:National^999.0 OR tags:National^2.0

于 2013-07-14T16:58:03.027 に答える