-1

我有以下 Lucene 查询,需要将其转换为 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);
}
4

1 回答 1

1

splitInputStringOnSpace在不知道和之间的区别的情况下,这有点难以做到splitInputStringOnSpace2。无论如何,对于第一部分,假设在 Solr 模式HOLIDAY_FIELD中命名holiday,等等。您应该能够使用 PHP 或任何您的前端语言来构造查询,如下所示:

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

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

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

于 2012-05-16T18:33:27.260 回答