gpt4 book ai didi

java - 正确使用Lucene BooleanQuery?

转载 作者:行者123 更新时间:2023-12-01 13:11:38 25 4
gpt4 key购买 nike

我正在尝试将一个 BooleanQuery 嵌套在另一个 BooleanQuery 中。

使用以下代码创建内部 BooleanQuery 并将其添加到 topBQuery。

    BooleanQuery topBQuery = new BooleanQuery();

// add a numeric range query on loan amount.
if( row.getLoan_amt() > 0 ){
BooleanQuery loanBQuery = new BooleanQuery();
Double loanMin = 0.0;
Double loanMax = 0.0;
Double loanAmt = row.getLoan_amt();
// Range should be within +- 5% of loan amount.
loanMin = loanAmt - (loanAmt * .05);
loanMax = loanAmt + (loanAmt * .05);

loanBQuery.add(NumericRangeQuery.newDoubleRange(TitleRecordColumns.SR_LOAN_VAL_1.toString(), loanMin, loanMax, true, true), BooleanClause.Occur.SHOULD);
loanBQuery.add(NumericRangeQuery.newDoubleRange(TitleRecordColumns.SR_LOAN_VAL_2.toString(), loanMin, loanMax, true, true), BooleanClause.Occur.SHOULD);
loanBQuery.add(NumericRangeQuery.newDoubleRange(TitleRecordColumns.SR_LOAN_VAL_3.toString(), loanMin, loanMax, true, true), BooleanClause.Occur.SHOULD);

topBQuery.add(loanBQuery, BooleanClause.Occur.MUST);
}

将另一个字段添加到 topBQuery 中,内容如下:

    if( !row.getPropertykey_tx().isEmpty() ){
//TitleRecordColumns is an enum
topBQuery.add(new TermQuery(new Term(TitleRecordColumns.SA_SITE_ADDR.toString(), row.getPropertykey_tx())), BooleanClause.Occur.SHOULD);
}

我只需要与我在任何 SR_LOAN_VAL 字段中创建的范围相匹配的文档。记录还应与提供的地址匹配。我是否正确创建了 BooleanQuery?

还有更好的方法来进行这种搜索吗?

我使用的是 Lucene 4.7。我和卢克一起查看了我的索引,我确信我已经正确地对字段建立了索引。谢谢你!

编辑:

这是我用来生成用于搜索索引的“最终查询”的代码。我见过的大多数例子都是这样做的。它是否正确?

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);
Query finalQuery = new QueryParser(Version.LUCENE_47, TitleRecordColumns.SA_SITE_ADDR.toString(), analyzer).parse(topBQuery.toString());
IndexSearcher searcher = new IndexSearcher(reader);
TopDocs results = searcher.search(finalQuery, 5);

最佳答案

我觉得很合理。

当您说 A 记录“应该”也与地址匹配时,您的意思尚不清楚。如果您的意思是所有结果必须与地址匹配,那么您应该在将该子查询添加到BooleanClause.Occur.MUST 时更改Occur 参数。如果您的意思是最好在该字段上进行匹配,并且您希望在顶部查看这些文档,但任何与数字范围查询匹配的结果都是可接受的结果,那么您当前的查询是正确的。

关于java - 正确使用Lucene BooleanQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22813486/

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