开发者

Problem in solrQuery.setFilteQueries() Method

开发者 https://www.devze.com 2023-04-04 09:52 出处:网络
I have the following query which I took from my URL public static String query=\"pen&mq=pen&f=owners%5B%22abc%22%5D&f=application_type%5B%22cde%22%5D\";

I have the following query which I took from my URL

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

public static String q="pen";

I parsed my query string and took each facetname and facet value from it and stored in a map

String querydec = URLDecoder.decode(query, "UTF-8");
String[] facetswithval = querydec.split("&f=");
Map<String, String> facetMap = new HashMap<String, String>();
for (int i = 1; i < facetswithval.length; i++) {

        String[] fsplit = facetswithval[i].split("\\[\"");
        String[] value = fsplit[1].split("\"\\]");

        facetMap.put(fsplit[0], value[0]);
    }

Then i use the following code to query in solr using solrj

CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr/");

        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery(q);

        for (Iterator<String> iter = facetMap.keySet().iterator(); iter.hasNext();){
              String key=iter.next();
              System.out.println("key="+key+"::value="+facetMap.ge开发者_StackOverflowt(key));
              solrQuery.setFilterQueries(key+":"+facetMap.get(key));
          }
        solrQuery.setRows(MAX_ROW_NUM);
        QueryResponse qr = server.query(solrQuery);
        SolrDocumentList sdl = qr.getResults();

But after running my code I found out that solrQuery.setFilterQuery method is setting filter for only last set facet. That means if i m running the loop and using this function three times it is taking the last set filter values only. Can somebody please clarify this and tell me better approach for doing this. Also I am decoding url. So, if my facet contains some special character in the middle then i am not getting any result for that. I tried using it without encoding also but it didnt work. :(


There is also a addFilterQuery method, I would call that since you are setting the filter queries individually in your for loop.

Also, please see this post Filter query with special character using SolrJ client from the Solr Users Mailing List about the need to still escape special characters in queries.

0

精彩评论

暂无评论...
验证码 换一张
取 消