【发布时间】:2018-07-06 01:28:55
【问题描述】:
过去几年我们一直在使用 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)。它对简单查询非常有效,但在使用 spanNear 或 spanOr 等函数时就不行了。请参阅下面的部分查询:
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 库来生成查询,以防万一。提前致谢。
【问题讨论】:
-
不确定我是否了解您要查找的内容。那么,您在 java 中生成
SpanNearQuery和SpanOrQuery,并希望在 ElasticSearch 中使用相同的查询而不重写它们?想必你的意思不是要将 java 代码 传递到 ElasticSearch API 中,那么你说不想重写它们是什么意思呢? -
@femtoRgon 因为 ElasticSearch 允许使用 query_string API 传递 Lucene 查询,所以我只得到了我正在生成的本机 Lucene 查询。当我这样做时,这就是我得到的输出,带有 spanNear 和 spanOr 函数。如果我将该查询发送到 ElasticSearch,它不会找到 spanNear 或 spanOr...
-
你的意思是你只是从你的查询中得到
toString? Elasticsearch(或 Lucene,就此而言)没有任何东西可以解析 Query.toString 的输出。
标签: java elasticsearch lucene