Java 在Lucene中有没有一种方法可以将多字段查询与数值范围结合使用?

Java 在Lucene中有没有一种方法可以将多字段查询与数值范围结合使用?,java,lucene,information-retrieval,Java,Lucene,Information Retrieval,我目前正在使用MultiFieldQueryParser创建和搜索它。我有大约20个不同的字段,都是不同的数据类型,我希望搜索能够考虑到所有这些字段。这里是我构建解析器和获取查询对象的地方: MultiFieldQueryParser mfqp = new MultiFieldQueryParser( keyHashSet.toArray(new String[] {}), analyzer); mfqp.setAllowLeadingWildcard(true

我目前正在使用MultiFieldQueryParser创建和搜索它。我有大约20个不同的字段,都是不同的数据类型,我希望搜索能够考虑到所有这些字段。这里是我构建解析器和获取查询对象的地方:

MultiFieldQueryParser mfqp = new MultiFieldQueryParser(
                keyHashSet.toArray(new String[] {}), analyzer);

mfqp.setAllowLeadingWildcard(true);

Query q = mfqp.parse(search);

System.out.println(q.getClass());
其中keyHashSet包含我的所有数据键

每当我传入范围查询时,例如:

Heading:[0 to 360]
打印输出返回的类是

class org.apache.lucene.search.TermRangeQuery
即使我这样设置标题字段:

doc.add(new FloatField("Heading", value, Field.Store.YES));

有没有一种方法可以使用
MultiFieldQueryParser
执行
NumericRangeQuery

我一直面临着同样的问题,问题是每当使用MultiFieldQueryParser通过范围查询时,它就会将其解释为TermRangeQuery,因此我们需要根据需要定制类MultiFieldQueryParser,我正在使用lucene 4.7.2;这就是我所做的,因为在索引期间,我将数字解析为一样长的长度,我只有一个字段要应用数字范围查询,即“price”


你有没有找到解决办法?
public class CustomMultiFieldQueryParser extends MultiFieldQueryParser {

    public CustomMultiFieldQueryParser(Version matchVersion, String[] fields, Analyzer analyzer) {
        super(matchVersion, fields, analyzer);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected org.apache.lucene.search.Query getRangeQuery(String fieldName, String min, String max, boolean minInclusive,
            boolean maxInclusive) throws ParseException {
        // TODO Auto-generated method stub
        if(fieldName.equals("price")) {
            return NumericRangeQuery.newLongRange(fieldName, Long.parseLong(min), Long.parseLong(max), minInclusive, maxInclusive);
        }
        return super.getRangeQuery(fieldName, min, max, minInclusive, maxInclusive);
    }
}