4

私は現在solrに取り組んでおり、結合を作成するには、次のように記述する必要があります。

http://localhost:8983/solr/select?q=category_name:cat1%20_query_:"{!dismax%20qf=category_name%20v=cat2}"

ここで、cat1とcat2は、私の製品を入れたいカテゴリです。つまり、これら2つのカテゴリを持つすべての製品です。

SolrJ apiを使用してJavaで同じものを作成する方法を見つけることができるため、これを使用して正確な結果を取得しています。

私がやっていたワット

String myQuery = "";
myQuery += "category_name:";
myQuery += categoryNames.get(0);
myQuery += "%20_query_:\"{!dismax%20qf=category_name%20v=";
myQuery += categoryNames.get(1);
myQuery += "}\"";
query.setQuery(myQuery);

これはsolnを与えません、solrはエラーを与えます

今ページごとに1番目のans

SolrQuery query = new SolrQuery();
query.setQuery("category_name:" + categoryNames.get(0));
String join = "";
join += "{!dismax&qf=category_name&v=";
join += categoryNames.get(1);
join += "}";
query.setParam("_query_", join);
QueryResponse response = solr.query(query);

より良いが、それでも機能しない、それ以来私が望まない「&」を追加する

q=category_name:cat1&_query_={!dismax%26qf%3Dcategory_name%26v%3Dcat2}

3番目に、最新の回答で提案されたwatページを試しましたが、惨めに失敗しました。これは、watがsolrに処理のために送信され、ANDではなくOR演算子のように機能します。

q=category_name:cat1+_query_:"{!dismax+qf%3Dcategory_name+v%3Dcat2}"

PS:myQueryの書き方について解決策を見つける必要がありました、Plsヘルプ、それに固執しました

最終的に解決された、ネストされた+ = "AND query:\" {!dismax qf = category_name v =";は、私の問題の解決策です。

これでクエリが処理されます!! ありがとう

4

1 に答える 1

4

Solrでネストされたクエリを読んだ後、SolrJがそれらをエンコードするため、問題はすでにエンコードされた値を渡すことに関係しているように見えます。

これは、動作するはずのエンコーディングなしの修正版です。

SolrQuery query = new SolrQuery();   
String nested = "";
nested += "category_name:";
nested += categoryNames.get(0);
nested += " AND _query_:\"{!dismax qf=category_name v=";
nested += categoryNames.get(1);
nested += "}\"";
query.setQuery(nested);
QueryResponse response = solr.query(query);

これが期待どおりに機能しない場合は、jetty または tomcat のログを調べて実際に Solr に送信されている URL を確認し、必要な結果が得られるように調整する必要があります。

更新:クエリオプションが AND 比較になるように変更されました。

于 2011-09-09T12:29:56.820 に答える