查询HttpSolrServer。
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery(q);
QueryResponse queryResponse = solrServer.query(solrQuery);
我需要构建一个solr查询,比如 "作者:* user_inputed_text * title:* user_inputed_text *" 我需要像PreparedStatement这样的东西,但我在solrj库中找不到类似的东西。如何构建不会引起注入的查询?如何使字符串由用户输入 - \ user_input_text \ safe?
我正在使用连接构建查询。当我有,例如这段代码:
public String buildQuery(String userInputedText) {
String query = "author:*" + userInputedText + "* OR title:*" + userInputedText + "*";
}
然后用户可以注入一些子查询并接收结果,但不受限制。 例如,输入的字符串是:"或标题:"。所以,整个查询将是: 作者:* OR标题:* OR标题:* OR标题:*
在这种情况下,用户会收到所有结果(它们不受限制)并传递模式作者:*?* OR title:*?*。
答案 0 :(得分:6)
请考虑使用内置的solrj ClientUtils
实用程序类。通过它你可以逃脱userInputText
String escapedUserInputText = ClientUtils.escapeQueryChars(userInputText)
有关详细信息,请查看queryparser syntax页面。