Express Lucene查询到Solr

时间:2012-05-16 17:41:25

标签: solr lucene

我有以下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);
}

1 个答案:

答案 0 :(得分:1)

如果不知道splitInputStringOnSpacesplitInputStringOnSpace2之间的区别,这有点难。在任何情况下,对于第一部分,假设HOLIDAY_FIELD在Solr模式中被命名为holiday等,您应该能够使用PHP或您的前端语言构建查询,如下所示:

对于给定字符串中的每个word,添加+holiday:word。 (为什么这行在Java代码中出现两次?) 然后添加description:1。 然后,对于带有通配符(*?的每个查询字词,也可以添加它 - 就像它一样description:word

确保用空格分隔所有这些,并将整个字符串放在Solr查询的q=部分。

最后,为什么这一切?为什么不打印出最终的Lucene查询?由于查询语法非常相似,因此它很可能在Solr中开箱即用。