0
我需要以編程方式針對多個Solr字段構建布爾查詢。我認爲Lucene MultiFieldQueryParser
將是一個很好的選擇。除非涉及特殊字符,否則此效果很好。Solr,特殊字符和MultiFieldQueryParser
public class QueryParserSpike {
String userQuery = "(-)-foo";
String escapedQuery = ClientUtils.escapeQueryChars(userQuery); // \(\-\)\-foo
Analyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_43);
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_43, new String[]{"a"}, analyzer);
@Test(expected=ParseException.class)
public void testNoEscape() throws Exception {
parser.parse(userQuery); // Throws an exception
}
@Test
public void testEscape() throws Exception {
Query q = parser.parse(escapedQuery);
System.out.println(q.toString()); // a:(-)-foo (This can't be parsed by Solr)
}
@Test
public void testDoubleEscape() throws Exception {
String doubleEscapedQuery = escapedQuery.replaceAll("\\\\", "\\\\\\\\") ;
Query q = parser.parse(doubleEscapedQuery);
System.out.println(q.toString()); // (a:\) (a:\-\) (a:\-foo) (This isn't the correct query)
}
}
我試圖擺脫這將是a:\(\-\)\-foo
。有沒有一個類似的Solr類?或者是自己編寫處理MultiFieldQueryParser結果的最佳選擇?
那麼,有什麼辦法可以用Solr查詢解析器做類似的事情嗎?我需要創建一個可以傳遞給SolrJ的查詢字符串。 – condit
我相信Solr DisMax查詢解析器應該處理你正在查找的內容,請參閱[qf屬性](http://wiki.apache.org/solr/ExtendedDisMax#qf_.28Query_Fields.29)。 – femtoRgon