当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch:如何编写将在同一令牌上包含多个条件的bool查询?

施永宁
2023-03-14

我有一个带标记器的字段,它被点分割。搜索时,以下值为aaa。bbb将分为两个术语:aaa和bbb。

我的问题是如何编写bool查询,将包含多个条件在同一项?

例如,我想得到所有文档,其中它的字段包含一个与gmail模糊搜索匹配的术语,但同一术语不得包含gamil

以下是我想要实现的一些示例:

  • 匹配:因为它匹配模糊搜索,而不是gamil
  • <代码>gamil。bmail//匹配:因为术语bmail与模糊搜索匹配,而不是gamil
  • 没有匹配:因为它匹配模糊搜索,但等于gamil

注意:以下查询似乎不起作用,因为它看起来好像一个术语匹配一个条件,而第二个术语匹配另一个,它将被视为命中。

{
  ...
  "body": {
    "query": {
      "bool": {
        "must": [
          {
            "fuzzy": {
              "my_field": {
                "value": "gmail",
                "fuzziness": 1,
                "max_expansions": 2100000000
              }
            }
          },
          {
            "bool": {
              "must_not": [
                {
                  "query_string": {
                    "default_field": "my_field",
                    "query": "*gamil*",
                    "analyzer": "keyword"
                  }
                }
              ]
            }
          }
        ]
      }
    }
  },
}

共有1个答案

周涵畅
2023-03-14

我最终通过执行模糊(或任何其他)查询来使用Highlight,然后通过返回的Highlight对象以编程方式过滤结果。

如果不需要正则表达式,或者可以确保不超过布尔查询限制,那么span查询也可能是一个不错的选择。(请参阅提供的链接中的更多详细信息)

 类似资料:
  • 我在StackOverflow上找到了一大堆关于条件WHERE子句的答案,但是我找不到一个对我的问题有点特殊的答案,所以我只是想寻求一些帮助。。。 我公司的网站包含所有直接写在C#代码中的SQL查询(我不喜欢,但那是另一回事) 表单中有一组复选框(目前有3个选项,但此列表可能会增加)。对于选择的每个“提供者类型”,需要向WHERE子句添加一个附加条件,但我不确定如何最好地处理这个问题。 下面是处理

  • 问题内容: 我正在尝试创建仅在数组 的同一项目 上满足多个条件的情况下与文档匹配的查询/过滤器。 假设这是文档: 我希望能够检索在同一元素上具有N个条件匹配的文档。例如:应该匹配文档,但是不应该匹配。 我正在尝试嵌套布尔过滤器(除此过滤器之外,我还有其他过滤器),但是它不起作用,有些类似于 任何想法如何做到这一点?谢谢 编辑 :我更改了映射,现在嵌套查询根据Val的响应工作。我现在无法在嵌套字段上

  • 问题内容: 我有一个用于Elasticsearch的简单JSON查询,如下所示: 仅当值(在这种情况下为“ a1”)不为空时,才如何执行第二个“必须”条件? 问题答案: 您可以使用以下方法实现它-

  • 很抱歉提出这个问题,但ElasticSearch查询可能会令人困惑。。。 目标:创建一个类似谷歌搜索查询的查询。输入的单词越多,得到的匹配结果越少。例如“四川酱”比“木兰四川酱”产生更多的结果。我的索引有一个博客文章类型,它有字段“标题”、“标签”、“类别”。ElasticSearch必须找到与查询中的所有单词相匹配的每个文档。文字可以遍布各个领域。例如,如果一个文档的标题包含“木兰”,它的标签包

  • 问题内容: 我想使用查询来比较多个字段。我有字段1到4。我想搜索字段1大于字段2并且下面的查询工作正常的数据; 现在,我想搜索哪个字段1大于字段2以及哪个字段3大于字段4的数据。根据Elastic Search:如何编写多语句脚本?和此链接,我只需要用分号分隔每个语句。所以应该是这样的: 但是该查询无效,并返回如下编译错误: ] .value> doc [‘field2’]。value; doc

  • 我想使用查询来比较多个字段。我有字段1到字段4。我想搜索数据,其中字段1大于字段2,下面的查询是完美的工作; 现在,我想搜索哪个字段1大于字段2,哪个字段3大于字段4的数据。根据弹性搜索:如何编写多语句脚本?在这个链接中,我只需要用分号分隔每条语句。所以它应该是这样的: 但该查询不起作用,并返回如下编译错误: {“根本原因”:[{“类型”:“脚本异常”,“原因”:“编译错误”,“脚本堆栈”:[“d