elasticsearch bool查询必须与OR结合使用

我目前正在尝试将基于Solr的应用程序迁移到Elasticsearch

我有这个lucene查询

(( 

name:(+foo +bar)

OR info:(+foo +bar)

)) AND state:(1) AND (has_image:(0) OR has_image:(1)^100)

据我了解,这是MUST子句与布尔OR的组合:

“获取所有包含(名称中包含foo AND条)或(信息中包含foo AND条)的所有文档。在此之后,按条件state = 1过滤结果,并增强具有图像的文档。”

我一直在尝试将布尔查询与MUST一起使用,但是我无法将布尔OR放入must子句中。这是我所拥有的:

GET /test/object/_search

{

"from": 0,

"size": 20,

"sort": {

"_score": "desc"

},

"query": {

"bool": {

"must": [

{

"match": {

"name": "foo"

}

},

{

"match": {

"name": "bar"

}

}

],

"must_not": [],

"should": [

{

"match": {

"has_image": {

"query": 1,

"boost": 100

}

}

}

]

}

}

}

如您所见,“信息”的必填条件缺失。

有没有人有办法解决吗?

非常感谢。

我已经更新了我的Elasticsearch查询并摆脱了该功能得分。我的基本问题仍然存在。

回答:

我终于设法创建了一个查询,该查询完全可以实现我想要的功能:

过滤的嵌套布尔查询。我不确定为什么没有对此进行记录。也许有人可以告诉我?

这是查询:

GET /test/object/_search

{

"from": 0,

"size": 20,

"sort": {

"_score": "desc"

},

"query": {

"filtered": {

"filter": {

"bool": {

"must": [

{

"term": {

"state": 1

}

}

]

}

},

"query": {

"bool": {

"should": [

{

"bool": {

"must": [

{

"match": {

"name": "foo"

}

},

{

"match": {

"name": "bar"

}

}

],

"should": [

{

"match": {

"has_image": {

"query": 1,

"boost": 100

}

}

}

]

}

},

{

"bool": {

"must": [

{

"match": {

"info": "foo"

}

},

{

"match": {

"info": "bar"

}

}

],

"should": [

{

"match": {

"has_image": {

"query": 1,

"boost": 100

}

}

}

]

}

}

],

"minimum_should_match": 1

}

}

}

}

}

在伪SQL中:

SELECT * FROM /test/object

WHERE

((name=foo AND name=bar) OR (info=foo AND info=bar))

AND state=1

请记住,它是如何在内部处理name = foo的,这取决于您的文档字段分析和映射。这可以从模糊行为到严格行为不等。

“ minimum_should_match”:1表示,应该至少一个should语句为真。

此语句意味着只要结果集中有一个包含has_image:1的文档,它就会增加100倍。这将更改结果的顺序。

"should": [

{

"match": {

"has_image": {

"query": 1,

"boost": 100

}

}

}

]

玩得开心:)

以上是 elasticsearch bool查询必须与OR结合使用 的全部内容, 来源链接: utcz.com/qa/432629.html

回到顶部