gpt4 book ai didi

java - 以编程方式生成 Solr (Lucene) 查询字符串

转载 作者:行者123 更新时间:2023-12-01 10:04:06 25 4
gpt4 key购买 nike

我有一个包含很多字段的复杂搜索表单,然后将其生成为 Solr 搜索字符串。我正在寻求建议,应该如何完成此操作。 (就像 SQL 中的预准备语句一样)。

目前我正在考虑这样的事情:

    QueryBuilder builder = new QueryBuilder(new WhitespaceAnalyzer());

BooleanQuery query = new BooleanQuery.Builder()
.add(builder.createBooleanQuery("field1", "foba*r"), BooleanClause.Occur.SHOULD)
.add(builder.createBooleanQuery("field2", "fo bar*"), BooleanClause.Occur.SHOULD)
// ...
.add(builder.createMinShouldMatchQuery("mmfield", "foo bar baz", 0.5f), BooleanClause.Occur.SHOULD)
.add(new TermRangeQuery("datefield", new BytesRef("lower"), new BytesRef("upper"), true, true), BooleanClause.Occur.SHOULD)
.add(builder.createBooleanQuery("", "-foo +bar"), BooleanClause.Occur.SHOULD)
.build();

System.out.println(query);

打印 field1:foba*r (field2:fo field2:bar*) ((mmfield:foo mmfield:bar mmfield:baz)~1) datefield:[lower TO upper] (-foo +bar) 这似乎是正确的,但是引入 QueryBuilderBooleanQuery.BuilderWhitespaceAnalyzer 只是为了构建一个“简单”感觉很愚蠢查询。

如果我省略QueryBuilder,那么我将不得不手动按空格分割用户提供的字符串,并从单词中创建一个 boolean 查询,因为我需要支持通配符,而 PhraseQueries 不支持通配符据我所知(例如“foo ba*”)

最佳答案

您可以使用本地参数替换在单独的变量中发送信息,并将准备好的语句保留在 Solr 端。每个语句可能具有不同的请求处理程序端点。

参见my example for contact form search展示了复杂的查询、多个参数和参数替换。

就通配符而言,您可能需要查看 SurroundParser ,它显然支持通配符。不过,一般来说,从计算角度来看,通配符并不是一个好主意。

关于java - 以编程方式生成 Solr (Lucene) 查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36582153/

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