gpt4 book ai didi

java - 如何在 Apache Lucene 中将 PhraseQuery 与 RangeQuery 结合起来?

转载 作者:太空宇宙 更新时间:2023-11-04 10:06:11 25 4
gpt4 key购买 nike

基本上,我希望能够使用以下查询“短语查询”AND date:[20180101 TO 20181231]来查询索引。我尝试使用 MultiFieldQueryParser,但出现以下错误:

线程“main”中出现异常 java.lang.IllegalStateException:字段“date”在没有位置数据的情况下被索引;无法运行 PhraseQuery

所以我使用如下代码构造了查询:

final Query phraseQ = new QueryParser("text", Analyzer.CUSTOM)
.parse(query);
final Query rangeQ = new QueryParser("date", Analyzer.CUSTOM)
.parse(dateRange);

final Query q = new BooleanQuery.Builder()
.add(phraseQ, BooleanClause.Occur.MUST)
.add(rangeQ, BooleanClause.Occur.MUST)
.build();

其中查询为“短语查询”~1,dateRange 为日期:[20180101 TO 20181231]。我仍然遇到以下异常

线程“main”中出现异常 java.lang.IllegalStateException:字段“date”在没有位置数据的情况下被索引;无法运行 PhraseQuery(phrase=date:"phrase query"~1)

尽管我不使用短语查询日期字段。

短语查询与范围查询是否可能相结合?

最佳答案

MultiFieldQueryParser 旨在在查询中未指定字段时搜索给定的所有字段列表。所以,这个:

MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] {"text","date"}, new StandardAnalyzer());
Query query = parser.parse("\"phrase query\" AND date:[20180101 TO 20181231]");

生成如下所示的查询:

+(text:"phrase query" date:"phrase query") +date:[20180101 TO 20181231]

这就是问题所在。如果您仅将其替换为标准 QueryParser,并将“text”作为默认字段,它应该会生成您想要的内容。

<小时/>

但是,就您提供的代码而言,它看起来不错。尝试在解析 dateRange 之前打印它的内容,确保它是您所认为的那样。

关于java - 如何在 Apache Lucene 中将 PhraseQuery 与 RangeQuery 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894559/

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