0

URLから取得した次のクエリがあります

public static String query="pen&mq=pen&f=owners%5B%22abc%22%5D&f=application_type%5B%22cde%22%5D";

このクエリを使用してsolrをクエリしたい

 CommonsHttpSolrServer server = new CommonsHttpSolrServer( "http://localhost:8080/solr/");          
server.setParser(new XMLResponseParser());          
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery(query); 
 QueryResponse qr =server.query(solrQuery);
 SolrDocumentList sdl = qr.getResults();

System.out.println("Found: " + sdl.getNumFound());

Tomcat ログ ファイルでクエリを確認したところ、次のように翻訳されています。

path=/select params={version=2&wt=javabin&q=pen%26mq%3Dpen%26f%3Downers%255B%2522abc%2522%255D%26f%3Dapplication_type%255B%2522cde%2522%255D`

500個のドキュメントがあるにもかかわらず、0の結果が得られます。を使用してクエリをデコードしようとしました

URLDecoder.decode(query,"UTF-8");

しかし、その後、「[」記号について不平を言い始めました。

org.apache.lucene.queryParser.ParseException: Encountered " "]" "] 

このクエリを使用してsolrサーバーにクエリを実行するにはどうすればよいですか? クエリを解析し、各フィルターの値を取得してから使用する必要がありますか?

 solrQuery.setFilterQueries()

方法。誰かが私を助けてくれませんか

4

1 に答える 1

3

Tomcat ログに従って、Solr への手動呼び出しで URL から取得したものと、Solrj からの solr 呼び出しにパラメーターとして渡されているものを比較すると、それらは一致しません。

呼び出しでエンコードされた url パラメーターを渡しているようです。solrQuery.setQuery(query)その後、Solrj はエンコード済みのパラメーターにエンコードを適用しています。pen&mq=penあなたはそれがどこに変わっているかを見ることができますq=pen%26mq%3Dpen

Solrj Wiki ページに基づいて、オプションを使用してすべてのクエリ パラメータを設定することをお勧めしquery.setParamます。したがって、次のことを行う必要があります。

SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery("pen");
solrQuery.setParam("mq","pen");
solrQuery.setParam("f","owners[\"abc\"]");
solrQuery.setParam("f","application_type[\"cde"\]");
QueryResponse qr = server.query(solrQuery);
SolrDocumentList sdl = qr.getResults();

System.out.println("Found: " + sdl.getNumFound());

更新: setParams への完全な変換を追加しました。

于 2011-09-09T12:03:05.007 に答える