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

ElasticSearch中的查询和排除

谷梁嘉运
2023-03-14

我试图将match_phrase_prefix查询与exclude查询一起使用,以便它匹配除要排除的术语之外的所有术语。我在一个基本的URI查询中找到了它,但不是常规的JSON查询。如何将此URI转换为JSON类型查询?

"http://127.0.0.1:9200/topics/_search?q=name:"
                        + QUERY + "* AND !name=" + CURRENT_TAGS

其中current_tags是不匹配的标记列表。

这是我目前所掌握的:

{
  "query": {
    "bool": {
      "must": {
        "match_phrase_prefix": {
          "name": "a"
        }
      },
      "filter": {
        "terms": {
          "name": [
            "apple"
          ]
        }
      }
    }
  }
}

但是,当我这样做时,Apple仍然包含在结果中。如何排除Apple

共有1个答案

韦晟睿
2023-03-14

您就快到了,您可以使用must_not,这是布尔查询的一部分来排除您不想要的文档,下面是示例的工作示例。

索引映射

{
 
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      }
  }
}
}

将示例文档索引为AppleAmazon符合搜索条件的世界上最大的公司:)

搜索查询以排除Apple

{
  "query": {
    "bool": {
      "must": {
        "match_phrase_prefix": {
          "name": "a"
        }
      },
      "must_not": {
        "match": {
          "name": "apple"
        }
      }
    }
  }
}

搜索结果

 "hits": [
      {
        "_index": "matchprase",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.6931471,
        "_source": {
          "name": "amazon"
        }
      }
    ]
 类似资料:
  • 问题内容: 具有以下映射: 我在上面放了两个项目: 现在,我想在每个字段上搜索,但是,所以我要做的是: 它应该只显示该项目,因为第二个项目带有单词,但是它在上,这就是我要忽略的内容。如何存档? PS:这只是一个简单的示例,我有一个包含很多属性的映射,我想在某些搜索中忽略其中的一些属性。 PS2:我正在使用ES 2.3.2 问题答案: 该设置仅在不返回响应中的字段时才有用,但这并不排除搜索该字段。

  • 问题内容: 我有以下Elasticsearch查询。 假设我想从此搜索查询中排除。该文档指出以下内容: 它还支持通配符,例如:test ,以及“添加”(+)和“删除”(-)的功能,例如:+ test ,-test3。 据我了解,我应该能够执行以下操作。 但是,出现以下错误。 如果删除加号和减号,则查询运行正常。如果添加通配符,它​​似乎可以工作,例如以下查询。 但是,这并不是我真正想要的。 当我使

  • 问题内容: 我是Elasticsearch的新手。我正在尝试编写一个查询,该查询将按字段分组并计算总和。在SQL中,我的查询如下所示: 我有在ES中看起来像这样的数据: 我想本质上在ES中运行与SQL中相同的查询,这样我的结果将类似于(当然是json): 问题答案: 在elasticsearch中,您可以通过使用术语stats facet 实现此目的:

  • 也许查询过滤器不正确?(我尝试了几个选项都没有成功) 错误:{“错误”:“SearchPhaseExecutionException[未能执行阶段[query],总失败;shardFailures{[AS6HqxgNRtyU9-pQKhJsXQ][IDX_Cerception][3]:SearchParseException[[IDX_Cerception][3]:From[-1],大小[-1]:

  • 我有两个独立的索引- 1。产品 2。currency_rates 产品索引中的文档具有以下详细信息- currency_rates索引中的文档具有以下详细信息- 我希望在products index的price字段中实现排序, 但是由于product index中的每个文档可能有不同的货币, 我需要首先将所有货币转换为美元, 并在转换后的ResultSet上进行carryout排序。 以下是我的创

  • 我正在使用elasticsearch从json文件中过滤和搜索,我是这项技术的新手。所以我有点困惑如何在ElasticSearch中编写查询。 这是oracle查询。如何在ElasticSearch中编写此查询?我使用的是elasticsearch版本6.8.13