gpt4 book ai didi

java - 有没有办法在 Lucene 中结合使用 MultiFieldQuery 和 NumericRanges?

转载 作者:搜寻专家 更新时间:2023-11-01 03:37:20 25 4
gpt4 key购买 nike

我目前正在使用 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 ;这是我所做的,因为在索引期间我已经解析了这个数字,我只有一个字段要应用数字范围查询,即“价格”,

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);
}
}

关于java - 有没有办法在 Lucene 中结合使用 MultiFieldQuery 和 NumericRanges?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27046350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com