gpt4 book ai didi

java - ElasticSearch 中的复杂 Lucene 查询

转载 作者:行者123 更新时间:2023-11-30 06:06:43 25 4
gpt4 key购买 nike

过去几年我们一直在使用 Lucene,即将迁移到 ElasticSearch。我们有很多想要重用的 Lucene 查询(复杂的查询)。我在 ElasticSearch 中看到了“query_string”API ( https://www.elastic.co/guide/en/elasticsearch/reference/6.3/query-dsl-query-string-query.html#query-string-syntax )。它对于简单查询非常有效,但在使用 spanNearspanOr 等函数时则不然。请参阅下面的查询的一部分:

spanNear([spanOr([ADDRESS:13, ADDRESS:13a, ADDRESS:13b, ADDRESS:13c, ADDRESS:13d, ADDRESS:13e, ADDRESS:13f, ADDRESS:13g, ADDRESS:13h, ADDRESS:13i, ADDRESS:13j, ADDRESS:13k, ADDRESS:13l, ADDRESS:13m, ADDRESS:13n, ADDRESS:13r, ADDRESS:13s, ADDRESS:13u, ADDRESS:13v, ADDRESS:13w, ADDRESS:13x, ADDRESS:13y, ADDRESS:13z]), [ADDRESS:carlton, ADDRESS:chalton, ADDRESS:charaton, ADDRESS:charleton, ADDRESS:charlon, ADDRESS:charlson, ADDRESS:charlston, ADDRESS:charlton, ADDRESS:charltons, ADDRESS:charlvon, ADDRESS:charston, ADDRESS:charton, ADDRESS:chorlton, ADDRESS:harlton, ADDRESS:sharlton]))

您知道使用此类查询而不将其重写为 ES 格式的最佳方式是什么吗?我们使用 Lucene Java 库来生成查询,以防有帮助。提前致谢。

最佳答案

听起来您正在从查询中获取toString,并希望 ElasticSearch 能够解析它。坏消息是,Elasticsearch 中没有任何内容可以解析 Query.toString 的输出。 Lucene 中也没有任何东西可以解析它。对于简单的查询,它可能会输出可解析的查询字符串,但这永远无法保证。 Query.toString() 用于调试,而不是序列化。

为了在elasticsearch中运行这些查询,API支持span queries的完整补充。 ,包括span_nearspan_or

还有一些查询解析器确实具有支持跨度查询的语法,例如 SurroundComplex Phrase 。不过,ElasticSearch 并没有开箱即用,但如果您愿意花大力气组装一个插件以在 ElasticSearch 中使用它们,那么这可能是一个选择(我见过引用的一个过程,看起来相当易于管理,但我不太熟悉)。

关于java - ElasticSearch 中的复杂 Lucene 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51150541/

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