程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了elasticsearch bool查询必须与OR结合使用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决elasticsearch bool查询必须与OR结合使用?

开发过程中遇到elasticsearch bool查询必须与OR结合使用的问题如何解决?下面主要结合日常开发的经验,给出你关于elasticsearch bool查询必须与OR结合使用的解决方法建议,希望对你解决elasticsearch bool查询必须与OR结合使用有所启发或帮助;

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

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

这是查询:

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
      }
    }
   }
 ]

玩得开心:)

解决方法

我目前正在尝试将基于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查询并摆脱了该功能得分。我的基本问题仍然存在。

大佬总结

以上是大佬教程为你收集整理的elasticsearch bool查询必须与OR结合使用全部内容,希望文章能够帮你解决elasticsearch bool查询必须与OR结合使用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。