我有以下Lucene Query并需要将其转换为Solr(v 3.5)查询:
final String[] terms = splitInputStringOnSpace(input);
for (final String string : terms) {
booleanQuery.add(new TermQuery(new Term(DocumentFieldsConstants.HOLIDAY_FIELD, string)), Occur.MUST);
booleanQuery.add(new TermQuery(new Term(DocumentFieldsConstants.HOLIDAY_FIELD, string)), Occur.MUST);
}
booleanQuery.add(new TermQuery(new Term(DocumentFieldsConstants.DESCRIPTION_FIELD, "1")), Occur.SHOULD);
final String[] exactTerms = splitInputStringOnSpace2(input);
for (final String string : exactTerms)
{
final WildcardQuery wildcardQuery = new WildcardQuery(new Term(DocumentFieldsConstants.DESCRIPTION_FIELD, string));
booleanQuery.add(wildcardQuery, Occur.SHOULD);
}
答案 0 :(得分:1)
如果不知道splitInputStringOnSpace
和splitInputStringOnSpace2
之间的区别,这有点难。在任何情况下,对于第一部分,假设HOLIDAY_FIELD
在Solr模式中被命名为holiday
等,您应该能够使用PHP或您的前端语言构建查询,如下所示:
对于给定字符串中的每个word
,添加+holiday:word
。 (为什么这行在Java代码中出现两次?)
然后添加description:1
。
然后,对于带有通配符(*
或?
的每个查询字词,也可以添加它 - 就像它一样description:word
。
确保用空格分隔所有这些,并将整个字符串放在Solr查询的q=
部分。
最后,为什么这一切?为什么不打印出最终的Lucene查询?由于查询语法非常相似,因此它很可能在Solr中开箱即用。